javascript减少对对象不起作用

javascript减少对对象不起作用

我正在尝试了解reduce的工作原理

var expense = [
        {
            item: 'Bed',
            cost: 1499,
            date: '02-23-2018'
        },
        {
            item: 'Phone',
            cost: 2499,
            date: '02-23-2018'
        },
        {
            item: 'Book',
            cost: 400,
            date: '02-23-2018'
        },
        {
            item: 'Mattress',
            cost: 700,
            date: '02-23-2018'
        },
        {
            item: 'Food',
            cost: 300,
            date: '02-23-2018'
        }
    ];

    var totalExpense = expense.reduce(function(a,b){
        console.log(a.cost, b.cost);
        return a.cost + b.cost;
    });

    console.log(totalExpense);


这将totalExpense设为NaN。

输出:-

1499 2499
undefined 400
undefined 700
undefined 300
NaN


当我使用简单的费用数组执行相同的操作时,它可以正常工作。

最佳答案

您传递给reduce的回调的第一个参数是前一个值(a)-或传递给reduce的第二个参数(初始值)

[].reduce(function(a, b) { ... }, 0);
          ^ callback              ^ initial value


a将保存每个先前迭代的结果,因此要获得所有成本的总和,只需添加b.cost



var expense = [{
    item: 'Bed',
    cost: 1499,
    date: '02-23-2018'
  },
  {
    item: 'Phone',
    cost: 2499,
    date: '02-23-2018'
  },
  {
    item: 'Book',
    cost: 400,
    date: '02-23-2018'
  },
  {
    item: 'Mattress',
    cost: 700,
    date: '02-23-2018'
  },
  {
    item: 'Food',
    cost: 300,
    date: '02-23-2018'
  }
];
var totalExpense = expense.reduce(function(a, b) {
  return a + b.cost;
}, 0);

console.log(totalExpense);





使用es6语法,您可以将它变成一个衬里

var totalExpense = expense.reduce((a, {cost}) => a + cost, 0);

关于javascript - javascript减少对对象不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48490131/

10-12 18:30