当我添加第三个对象时,为什么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
您需要返回与两个项目相同的结构,
var x = [{ Sum: 1 }, { Sum: 2 }, { Sum: 3 }];
var y = x.reduce((a, b) => ({ Sum: a.Sum + b.Sum })).Sum;
console.log(y);
或采用initialValue
的Array#reduce
进行减少,因为您添加了数字而不是属性。
Array#reduce
首先,您应添加一个累加器作为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
不同之处在于您没有在第一个代码的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}