javascript reduce函数的意外行为

javascript reduce函数的意外行为,javascript,arrays,reduce,Javascript,Arrays,Reduce,谁能解释一下为什么会返回NaN(chrome) 或 删除初始值param将正常工作: [{value:1}, {value:2}].reduce((a,b)=>a.value+b.value) 或者,使用地图将按预期工作: [{value:1}, {value:2}].map(e=>e.value).reduce((a,b)=>a+b, 0) 正确的语义是[{value:1},{value:2}].reduce((sum,object)=>sum+object.value,

谁能解释一下为什么会返回NaN(chrome)

删除初始值param将正常工作:

[{value:1}, {value:2}].reduce((a,b)=>a.value+b.value)
或者,使用地图将按预期工作:

[{value:1}, {value:2}].map(e=>e.value).reduce((a,b)=>a+b, 0)

正确的语义是
[{value:1},{value:2}].reduce((sum,object)=>sum+object.value,0)
。还原函数可以缩短为
(sum,{value})=>sum+value
。通读课文;一切都在那里解释。第一个参数是累加器,第二个参数是数组的下一个值。如果提供了起始值,那就是第一次迭代中的累加器;否则,将使用第一个数组元素(下一个是第二个元素)。包含起始值几乎总是使
reduce
调用不那么混乱,因此更喜欢使用它。“删除初始值param将正常工作” — 否:尝试三种元素。感谢您的解释-@user4642212
[{value:1}, {value:2}].reduce((a,b)=>a.value+b.value)
[{value:1}, {value:2}].map(e=>e.value).reduce((a,b)=>a+b, 0)