定义

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。



reduce() 对于空数组是不会执行回调函数的。

 


语法
[2,5,8,6].reduce(function(prev,next,item,arr){
...
},init);


prev 表示上一次调用回调时的返回值,或者初始值 init;

next 表示当前正在处理的数组元素;

index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;

init 表示初始值;

 

示例

数组求和

[1,2,3,4,5].reduce(function(prev,next){
return prev+next;
})//返回值15


求数组项的最大值

var arr = [3,9,4,3,6,0,9];
var max = arr.reduce(function (prev, next) {
return Math.max(prev,next);
});


由于未传入初始值,所以开始时prev的值为数组第一项3,next的值为数组第二项9,取两值最大值后继续进入下一轮回调。

数组去重

var newArr = arr.reduce(function (prev, next) {
prev.indexOf(next) === -1 && prev.push(next);
return prev;
},[]);


 

 

初始化一个空数组

 

 

将需要去重处理的数组中的第1项在初始化数组中查找,如果找不到,就将该项添加到初始化数组中

 

 

将需要去重处理的数组中的第2项在初始化数组中查找,如果找不到,就将该项继续添加到初始化数组中

 

 

将需要去重处理的数组中的第n项在初始化数组中查找,如果找不到,就将该项继续添加到初始化数组中

 

 

将这个初始化数组返回

总结

reduce()会对遍历数组的每一项,可将前面数组项遍历产生的结果与当前遍历项进行运算。