如何在 JavaScript 中将 reduce 方法应用于对象?



我正在阅读有关JavaScript中数组的reduce方法的信息,并在MDN Web文档中找到了以下示例:

var initialValue = 0;
var sum = [{x: 1}, {x:2}, {x:3}].reduce(
(accumulator, currentValue) => accumulator + currentValue.x
,initialValue
);
console.log(sum) // logs 6

当我运行这个时,我没有得到结果"6",而是"[对象对象]710">

但是当我在 Stackoverflow 代码段上运行它时,我得到了"6"。

怎么了?

如果未提供初始值,则第一次迭代使用第 0 个元素作为accumulator,第一个元素作为currentValue。这将适用于对数字数组和其他一些有用的情况求和。

var reducer = ( acc, val ) => {
console.log( acc, val );
return acc + val;
})
[ 1, 2, 3 ].reduce( reducer )
-> 1, 2
-> 3, 3
[ 1, 2, 3 ].reduce( reducer, 0 )
-> 0, 1
-> 1, 2
-> 3, 3

换句话说,在你的案例中省略初始值就像做:

[{x: 2}, {x: 3}].reduce( ( acc, val ) => acc + val.x, {x: 1} );

因此,第一次迭代的计算结果为{x: 1} + 2

reduce具有空数组且没有初始值时会出错,因此最好始终提供它。

相关内容

最新更新