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

Javascript 使用自定义函数从字典创建列表/数组,javascript,arrays,dictionary,transformation,Javascript,Arrays,Dictionary,Transformation,我有这样一个输入数组,数组的每个元素都是一个字典{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(i

我有这样一个输入数组,数组的每个元素都是一个字典
{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 ,并且不必考虑旧的浏览器兼容性。

您可以简单地使用它,它将创建一个新数组,该数组具有传递给它的函数返回的值,如

function extractY(data) {
    return data.map(function (item) {
      return item.y;
    });
}
或者你可以简单地写下与

console.log(Math.max.apply(Math, inputArray.map(function(item) {
    return item.y;
})));
您只需使用,它将使用传递给它的函数返回的值创建一个新数组,如下所示

function extractY(data) {
    return data.map(function (item) {
      return item.y;
    });
}
或者你可以简单地写下与

console.log(Math.max.apply(Math, inputArray.map(function(item) {
    return item.y;
})));
使用,可以直接获得最大y值:

inputArray.reduce(function(prev, curr) {
    return prev.y > curr.y ? prev : curr;
}).y
使用,可以直接获得最大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甚至可能不知道这个选项,并且可能欢迎关于如何编写更紧凑的代码的建议,我怀疑,如果没有将问题标记为“下划线”意味着基于下划线的答案在某种程度上是不可接受的,这是否属于常识范围,学习过程中的有用工具。

带下划线:

_.max(_.pick(inputArray, 'y'))
对于d3:

d3.max(inputArray, function(d) { return d.y; })
请注意@AmitJoki的评论:是的,我知道这个问题没有加下划线。如果您不想使用下划线,请忽略此答案。话虽如此,下划线是一个非常有用的工具带,非常适合解决此类问题以及其他许多问题。它经过全面测试,强健高效,能够正确处理所有边缘情况。与某些其他臃肿的库不同,它非常轻量级,非常值得学习


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

很高兴知道这么好的技能。很高兴知道这么好的技能。你的答案很有教育意义。是的,这正是我要找的。非常令人印象深刻。你的回答很有教育意义。是的,这正是我要找的。非常令人印象深刻。没有下划线标记!目前我的图表页面使用的是
d3
rickshaw
。我想深入挖掘一下,看看d3是否也有类似的帮助函数。没有下划线标记!目前我的图表页面使用的是
d3
rickshaw
。我想深入挖掘,看看d3是否也有类似的辅助功能。