reduce()
方法相当于一个累加器的函数,所述阵列的每个值(从左到右)将其累计计算;
*ie9以下的浏览器中,不支持该方法
语法
arr.reduce(callback[, initialValue])
callback函数有四个参数:
prev: 上一次叠加的结果值或者初始值
cur: 当前会参与叠加的项
index: 当前值的索引
arr: 数组本身
说明:
回调函数第一次执行时并且无initialValue时,prev的值为arr的第一项,cur的值为arr的第二项,index索引从1开始;
若有initialValue时,prev的值为initialValue, cur的值为arr的第一项,index索引从0开始;
initialValue设置prev的初始类型和初始值也就是叠加结果的类型。
如果数组为空,并且不提供initialValue,会抛出TypeError
错误;
如果数组为空,有initialValue;或者数组只有一个元素,无initialValue时:直接返回该值,而不再调用callback;
var maxCallback = ( pre, cur ) => Math.max( pre.x, cur.x );
var maxCallback2 = ( max, cur ) => Math.max( max, cur );// reduce() without initialValue
[ { x: 22 }, { x: 42 } ].reduce( maxCallback ); // 42
[ { x: 22 } ].reduce( maxCallback ); // { x: 22 }
[ ].reduce( maxCallback ); // TypeError
// map/reduce; better solution, also works for empty arrays
[ { x: 22 }, { x: 42 } ].map( el => el.x )
.reduce( maxCallback2 , 0 );
写一个最近用上的例子
var result = [
{ subject: 'math', score: 88, id:1 },
{ subject: 'chinese', score: 95, id:2 },
{ subject: 'english', score: 80, id:3 }
];
result.reduce((res, cur) => {
res[cur.id]=cur
return res
},{})//Object {1: Object, 2: Object, 3: Object}
相关阅读:
参考文档: