如何用reduce来总结一个对象数组的属性

时间:2018-04-20 04:49:38

标签: javascript arrays

说我有以下数组:

var BUILDINGS = [
    { production: {"numberProd": 6}},
    { production: {"numberProd": 11}},
    { production: {"numberProd": 14}},
];

我正在尝试使用reduce()来累计这些作品的总和。我试过以下内容:

BUILDINGS.reduce(function(a,b) {return a.production.numberProd + b.production.numberProd});

但是当我运行代码时,我得到了值NaN

我想知道如何正确设置reduce()声明。 谢谢!

3 个答案:

答案 0 :(得分:5)

您必须传递0的初始值,该值将在a的初始迭代中分配给第一个参数reduce()

尝试以下方法:



var BUILDINGS = [
    { production: {"numberProd": 6}},
    { production: {"numberProd": 11}},
    { production: {"numberProd": 14}},
];
var prod = BUILDINGS.reduce(function(a,b) {
  return a + b.production.numberProd;
}, 0);

console.log('Total:', prod);




答案 1 :(得分:1)

你非常接近:

BUILDINGS.reduce(function(a,b) {return a + b.production.numberProd}, 0);
BUILDINGS.reduce((currentValue, nextBuilding) => {
  return currentValue + nextBuilding.production.numberProd
}, 0) // 0 is the first value

答案 2 :(得分:0)

你可以这样做:



var BUILDINGS = [
    { production: {"numberProd": 6}},
    { production: {"numberProd": 11}},
    { production: {"numberProd": 14}},
];

console.log(BUILDINGS.reduce((sum, item) => {
  sum += item.production.numberProd;
  return sum;
}, 0));




如果您未将初始值作为0传递,则会得到NaN作为结果。