当我添加第三个对象时,为什么array.reduce返回NaN

问题描述 投票:1回答:2

当我添加第三个对象时,为什么array.reduce返回NaN?请参见下面的示例。我想念什么?

var x =[ 
 {Sum: 1},
 {Sum: 2},
 {Sum: 3}
]; 

var y = x.reduce((total, value) => total.Sum + value.Sum);

console.log(y);  // Why output is NaN?


x =[ 
 {Sum: 1},
 {Sum: 2},
]; 

y = x.reduce((total, value) => total.Sum + value.Sum);

console.log(y); // output = 3
javascript
2个回答
1
投票

您需要返回与两个项目相同的结构,

var x = [{ Sum: 1 }, { Sum: 2 }, { Sum: 3 }]; 
var y = x.reduce((a, b) => ({ Sum: a.Sum + b.Sum })).Sum;

console.log(y);

或采用initialValueArray#reduce进行减少,因为您添加了数字而不是属性。

Array#reduce

0
投票

首先,您应添加一个累加器作为reduce函数的第二个参数。假设您想要一个数字来代表总数,让我们以0开始。

当您通过化简功能时,您想要将每个var x = [{ Sum: 1 }, { Sum: 2 }, { Sum: 3 }]; var y = x.reduce((total, object) => total + object.Sum, 0); console.log(y);的值加到总计中,然后返回value.Sum。不应为total,因为total.Sum不是对象。

这里是一个有效的示例,带有控制台日志,用于简化功能中发生的事情:

total

0
投票

不同之处在于您没有在第一个代码的var x =[ {Sum: 1}, {Sum: 2}, {Sum: 3} ]; var y = x.reduce((total, value) => { console.log('1 -->', total, value); return total + value.Sum }, 0); console.log('final y value -->', y); x =[ {Sum: 1}, {Sum: 2}, ]; y = x.reduce((total, value) => { console.log('2 -->', total, value); return total + value.Sum }, 0); console.log('final y value -->', y); 之后添加,

{Sum: 3}
© www.soinside.com 2019 - 2024. All rights reserved.