浅析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}

相关阅读:

参考文档:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容