一、reduce归纳函数, 是数组原型上的方法,Array.prototype.reduce
二、reduce函数模型:
var newArr = arr.reduce(function(prev,elem,index,arr){
},initialVal);
三、reduce函数的第一个参数是回调函数(必传参数)
reduce为数组中的每一个元素依次执行回调函数function(prev,elem,index,arr){},数组中被删除或从未被赋值的元素不执行回调函数。
回调函数接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。
1、prev (上一次调用回调返回的值,或者是提供的初始值(initialValue)或是索引0的值)
2、elem (数组中当前被处理的元素)
3、index (当前被处理的元素在数组中的索引)
4、arr(调用 reduce 的数组)
四、reduce函数的第二个参数initialVal(非必传参数)
initialVal:作为第一次调用回调函数的第一个参数的值。如果没有提供initialVal,reduce会把索引0的元素赋给prev,然后从索引1的地方开始执行回调函数(即把索引1的元素赋给elem,index的值为1)。如果提供initialValue,从索引0开始开始执行回调函数。
五、示例1(没有设置initialVal):
var arr = [1,2,3];
var sum = arr.reduce(function(prev, cur, index, arr) {
console.log(prev, cur, index);
return prev + cur;
});
console.log(sum,'sum');
输出:
1 2 1
3 3 2
6 'sum'
六、示例2(有设置initialVal):
var arr = [1,2,3];
var sum = arr.reduce(function(prev, cur, index, arr) {
console.log(prev, cur, index);
return prev + cur;
},0);
console.log(sum,'sum');
输出:
0 1 0
1 2 1
3 3 2
6 'sum'
七、数组为空,没有设置initialValue报错
var arr = [];
var sum = arr.reduce(function(prev, cur, index, arr){
console.log(prev, cur, index);
return prev + cur;
})
//报错,"TypeError: Reduce of empty array with no initial value"
八、数组为空,有设置initialValue,不报错(这时的reduce方法没有执行)
var arr = [];
var sum = arr.reduce(function(prev, cur, index, arr){
console.log(prev, cur, index);
return prev + cur;
}, 0)
console.log(arr, sum);
输出:
[] 0
九、reduce的返回值,为回调函数的最后一次的返回值