我有一个输入数组,数组的每个元素都是字典{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
,也不必考虑旧的浏览器兼容性。
答案 0 :(得分:3)
你可以简单地使用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;
})));
答案 1 :(得分:3)
使用reduce
,您可以直接获得最大y值:
inputArray.reduce(function(prev, curr) {
return prev.y > curr.y ? prev : curr;
}).y
答案 2 :(得分:1)
使用下划线:
_.max(_.pick(inputArray, 'y'))
使用d3:
d3.max(inputArray, function(d) { return d.y; })
请注意@ AmitJoki的评论:是的,我知道这个问题没有被标记为下划线。如果您不想使用下划线,请随意忽略此答案。话虽如此,下划线是一个非常有用的实用工具带,非常适合解决诸如此类问题等许多其他问题。它经过了详尽的测试,强大而高效,可以正确处理所有边缘情况。与某些其他臃肿的图书馆不同,它非常轻巧,非常值得学习。
我怀疑是否属于常识领域,暗示未标记问题“强调”意味着基于下划线的答案在某种程度上是不可接受的,考虑到很容易想象在许多情况下OP可能甚至不知道这个选项,可能会欢迎有关如何编写更紧凑的代码的建议,同时在此过程中学习一个有用的工具。