我正在尝试了解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/