javascript减少对对象不起作用

Sta*_*y J 0 javascript reduce

我正在尝试了解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);
Run Code Online (Sandbox Code Playgroud)

这将totalExpense设为NaN。

输出:-

1499 2499
undefined 400
undefined 700
undefined 300
NaN
Run Code Online (Sandbox Code Playgroud)

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

chr*_*con 8

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

[].reduce(function(a, b) { ... }, 0);
          ^ callback              ^ initial value
Run Code Online (Sandbox Code Playgroud)

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

[].reduce(function(a, b) { ... }, 0);
          ^ callback              ^ initial value
Run Code Online (Sandbox Code Playgroud)

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

var totalExpense = expense.reduce((a, {cost}) => a + cost, 0);
Run Code Online (Sandbox Code Playgroud)