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()会对遍历数组的每一项,可将前面数组项遍历产生的结果与当前遍历项进行运算。