我正在尝试了解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)
当我使用简单的费用数组执行相同的操作时,它可以正常工作。
传递给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)
| 归档时间: |
|
| 查看次数: |
4295 次 |
| 最近记录: |