浅析reduce的用法

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}

相关阅读:

  • 廖雪峰的js教程
  • 数组reduce的高级用法

参考文档:

  • mozilla开发文档

你可能感兴趣的:(浅析reduce的用法)