使用自定义函数从字典中创建列表/数组

Create list/array from a dictionary using custom function

本文关键字:创建 列表 数组 字典 自定义函数      更新时间:2023-09-26

我有这样一个输入数组,数组的每个元素都是字典{x:a_int, y:a_int}。现在我需要提取所有的y值并创建一个新的数组,这样它就可以用来计算所有y-值的最大值。这是我当前的代码:

var inputArray = [{x:1,y:100},{x:2,y:101},{x:3,y:103}];
function extractY(data) {
    var result = [];
    data.forEach(function (item) {
      result.push(item.y);
    });
    return result;
}
// Test code
var yArray = extractY(inputArray);
console.log(Math.max.apply(Math, yArray));

我想缩短代码。由于我是javascript的新手,我想知道是否可以缩短函数extractY()。我的想象是具有一种转换功能。代码不应依赖于jQuery,也不必考虑旧浏览器的兼容性。

您可以简单地使用Array.prototype.map,它将使用传递给它的函数返回的值创建一个新的数组,就像这个

function extractY(data) {
    return data.map(function (item) {
      return item.y;
    });
}

或者你可以简单地写与相同的东西

console.log(Math.max.apply(Math, inputArray.map(function(item) {
    return item.y;
})));

使用reduce,您可以直接获得最大y值:

inputArray.reduce(function(prev, curr) {
    return prev.y > curr.y ? prev : curr;
}).y

带下划线:

_.max(_.pick(inputArray, 'y'))

带d3:

d3.max(inputArray, function(d) { return d.y; })

回复@AmitJoki的评论:是的,我知道这个问题没有加下划线。如果你不想使用下划线,可以忽略这个答案。话虽如此,下划线是一个非常有用的实用工具带,非常适合解决此类问题以及其他许多问题。它经过了详尽的测试,稳健高效,能够正确处理所有边缘情况。与某些其他臃肿的库不同,它非常轻量级,非常值得学习。

我怀疑,暗示没有将问题标记为"下划线"意味着基于下划线的答案在某种程度上是不可接受的,这是否属于常识范畴,因为很容易想象,在许多情况下,OP甚至可能不知道这个选项,并可能欢迎关于如何编写更紧凑的代码的建议,同时在这个过程中学习一个有用的工具。