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

如何在JavaScript中为对象应用reduce方法?,javascript,arrays,javascript-objects,reduce,Javascript,Arrays,Javascript Objects,Reduce,我正在阅读JavaScript中数组的reduce方法,我在MDN web文档中发现了以下示例: var initialValue=0; var sum=[{x:1},{x:2},{x:3}]。减少( (累加器,currentValue)=>累加器+currentValue.x ,初始值 ); console.log(sum)//logs 6当未提供初始值时,第一次迭代使用第0个元素作为累加器,第一个元素作为当前值。这将适用于对一系列数字和其他一些有用的情况求和 var reducer = (

我正在阅读JavaScript中数组的reduce方法,我在MDN web文档中发现了以下示例:

var initialValue=0;
var sum=[{x:1},{x:2},{x:3}]。减少(
(累加器,currentValue)=>累加器+currentValue.x
,初始值
);

console.log(sum)//logs 6
当未提供初始值时,第一次迭代使用第0个元素作为
累加器
,第一个元素作为
当前值
。这将适用于对一系列数字和其他一些有用的情况求和

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
使用空数组,并且没有初始值会出错,因此最好始终提供它。

当我运行此
时,我猜您的代码与此处发布的代码不同,否则您的结果将是相同的……也许您应该发布代码来演示您的问题,不是正确运行的代码我在浏览器控制台中运行了此代码,得到了
6
。你做错了什么,只有你自己才能明白:)哦,你们是对的,我错了!我没有在代码中添加初始值。这是我的代码:var sum=[{x:1},{x:2},{x:3}].reduce(函数(累加器,currentValue){return accumulator+currentValue.x;})console.log(sum),但当它不是对象数组时,可以不放置初始值。所以这有点让人困惑。为什么[1,2,3]。reduce(reducer)返回6,而让我们假设:[{x:1},{x:2},{x:3}]。reduce(reducer)with reducer=(acc,val)=>acc+val.x返回[object]23?我的意思是,在第一种情况下,我们不需要初始值,但在第二种情况下,我们需要一个初始值,以得到6作为结果?编辑澄清哦,谢谢!这完全回答了我的问题。按照您的建议,我将始终提供初始值:)