Javascript 还原返回为NaN的对象数组中的字段之和
我看到javascript中的Javascript 还原返回为NaN的对象数组中的字段之和,javascript,reduce,Javascript,Reduce,我看到javascript中的reduce函数有一种奇怪的行为 我有一个对象数组,如下所示: [ { a:1 }, {a:2}, ... ] const array = [{a:1}]; const reducer = (accumulator, currentValue) => accumulator.a + currentValue.a; console.log(array.reduce(reducer, {a: 0})); 我需要每个对象中a属性的总和,所以我写了以下内容: co
reduce
函数有一种奇怪的行为
我有一个对象数组,如下所示:
[ { a:1 }, {a:2}, ... ]
const array = [{a:1}];
const reducer = (accumulator, currentValue) => accumulator.a + currentValue.a;
console.log(array.reduce(reducer, {a: 0}));
我需要每个对象中a
属性的总和,所以我写了以下内容:
const array = [{a:1}, {a:2}];
const reducer = (accumulator, currentValue) => accumulator.a + currentValue.a;
console.log(array.reduce(reducer));
这正如预期的那样有效
如果我尝试使用包含单个对象的数组运行相同的代码,我会得到该对象作为reduce
调用的结果(这是预期的行为),因此我向reduce函数调用添加了一个默认值,如下所示:
[ { a:1 }, {a:2}, ... ]
const array = [{a:1}];
const reducer = (accumulator, currentValue) => accumulator.a + currentValue.a;
console.log(array.reduce(reducer, {a: 0}));
这也是一种魅力
我希望能够使用包含多个元素的数组运行第二版本的reduce调用,例如:
const array = [{a:1}, {a:2}];
const reducer = (accumulator, currentValue) => accumulator.a + currentValue.a;
console.log(array.reduce(reducer, {a: 0}));
但这会返回NaN
,我不明白为什么。
有人能解释一下吗?使用时,如果不声明初始值,数组的第一项将成为初始值。由于您需要一个数字,而不是一个对象作为结果,因此请使用0初始化。由于累加器现在是一个数字,而不是一个对象,请使用累加器
而不是累加器。函数体中的a
:
const数组=[{a:1},{a:2},{a:3}];
const reducer=(累加器,currentValue)=>累加器+currentValue.a;
log(array.reduce(reducer,0))代码>使用时,如果未声明初始值,则数组的第一项将成为初始值。由于您需要一个数字,而不是一个对象作为结果,因此请使用0初始化。由于累加器现在是一个数字,而不是一个对象,请使用累加器
而不是累加器。函数体中的a
:
const数组=[{a:1},{a:2},{a:3}];
const reducer=(累加器,currentValue)=>累加器+currentValue.a;
log(array.reduce(reducer,0))代码>当您的累加器
是一个对象时,您的减速机
返回一个数值(累加器.a+当前值.a的总和)
初始化累加器
至0
或返回累加器
本身,使其生效
const reducer = (accumulator, currentValue) => (accumulator.a += currentValue.a, accumulator);
演示
const数组=[{
a:1
}, {
a:2
}];
常量减速机=(累加器,currentValue)=>(累加器.a+=currentValue.a,累加器);
console.log(array.reduce)(reducer{
a:0
}));代码>当您的累加器
是一个对象时,您的减速机
返回一个数值(累加器.a+当前值.a的总和)
初始化累加器
至0
或返回累加器
本身,使其生效
const reducer = (accumulator, currentValue) => (accumulator.a += currentValue.a, accumulator);
演示
const数组=[{
a:1
}, {
a:2
}];
常量减速机=(累加器,currentValue)=>(累加器.a+=currentValue.a,累加器);
console.log(array.reduce)(reducer{
a:0
}));代码>您需要根据需要更改减速器功能
const reducer = (accumulator, currentValue) => ({ a: accumulator.a + currentValue.a });
原始代码不起作用,因为您返回的是一个数字,而不是您正在访问其属性的对象。您需要将reducer函数更改为
const reducer = (accumulator, currentValue) => ({ a: accumulator.a + currentValue.a });
当您返回一个Number
而不是您正在访问其属性的对象时,您的原始代码不起作用。您第一次尝试使用const数组=[{a:1},{a:2},{a:3}]代码>。因为在第一次迭代之后,累加器将是一个数字。这是否回答了您的问题?或者更好:。您的第一次尝试无法使用const数组=[{a:1},{a:2},{a:3}]代码>。因为在第一次迭代之后,累加器将是一个数字。这是否回答了您的问题?或者更好:。