Javascript使用嵌套数组减少

时间:2014-08-06 11:04:00

标签: javascript nested reduce

我试图用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)

3 个答案:

答案 0 :(得分:7)

按以下方式执行

var result = data.reduce(function (prev,next) {
    return prev + next[1];
},0);

console.log(result);//prints 3171

我最初发送0prev。所以它会像这样

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));