我试图用reduce方法对嵌套数组求和。我的dat数组如下所示:
var data = [
[1389740400000, 576],
[1389741300000, 608],
[1389742200000, 624],
[1389743100000, 672],
[1389744000000, 691]
];
我明白了:
// es5
data.reduce(function(prev, next) { return prev + next[1]; })
// es6 syntax
data.reduce((prev, next) => prev + next[1])
但是我只需要每个(嵌套)数组的第二个值。对我来说有什么提示或窍门吗?我试图对数组中的所有值求和。
//编辑:谢谢你的回答。问题是,我最后错过了 initialValue 。
// es6 solution
data.reduce((prev, next) => prev + next[1], 0)
答案 0 :(得分:7)
按以下方式执行
var result = data.reduce(function (prev,next) {
return prev + next[1];
},0);
console.log(result);//prints 3171
我最初发送0
为prev
。所以它会像这样
First Time prev->0 next->[1389740400000, 576]
Second Time prev->576 next->[1389740400000, 608]
让console.log(prev,next)
更好地理解。
如果你在文档中看到,你会得到它。
答案 1 :(得分:0)
如果data
是一个整数数组,那么你所写的内容就可以了。在您的情况下,data
是一个数组数组。因此,return语句应该对数组的元素进行操作:
return [previousValue[0] + currentValue[0], previousValue[1] + currentValue[1]];
答案 2 :(得分:0)
所有数组的通用方法,即使它们是不规则的样式。
使用:array.reduce(sum, 0)
function sum(r, a) {
return Array.isArray(a) ? a.reduce(sum, r) : r + a;
}
console.log([
[1389740400000, 576],
[1389741300000, 608],
[1389742200000, 624],
[1389743100000, 672],
[1389744000000, 691]
].reduce(sum, 0));
console.log([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12, [13, 14, 15, 16]]
].reduce(sum, 0));