JavaScript中使用嵌套数组的reduce函数

10

我正试图使用reduce方法对嵌套数组进行求和。我的数据数组长这样:

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)

一个简单的方法来求和所有值。 - wiesson
3个回答

18

按照以下步骤进行

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

console.log(result);//prints 3171

我在这里最初将prev设置为0,所以它会像这样进行。

First Time  prev->0 next->[1389740400000, 576]
Second Time prev->576 next->[1389740400000, 608]

做一个 console.log(prev,next),可以更好地理解。

如果你查看文档,你就会明白。


谢谢这个。我尝试了不同的方法,但是我错过了最后一个元素。也许我应该更仔细地阅读文档。 :) - wiesson

3

一种适用于所有数组的通用方法,即使它们是不规则的样式。

使用: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));


0
你所写的代码可以在 data 是整数数组的情况下运行。但在你的情况下,data 是一个数组的数组。因此,返回语句应该操作数组元素:
return [previousValue[0] + currentValue[0], previousValue[1] + currentValue[1]];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接