reduce()方法可以搞定的东西,for循环,或者forEach方法有时候也可以搞定,那为啥要用reduce()?这个问题,之前我也想过,要说原因还真找不到,唯一能找到的是:通往成功的道路有很多,但是总有一条路是最捷径的,亦或许reduce()逼格更高...
reduce()语法
arr.reduce(callback,[initialValue])
reduce为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用reduce的数组。
callback(执行数组中每个值的函数,包含四个参数)
1、previousValue(上一次调用回调返回的值,或者是提供的初始值(initialValue))
2、currentValue(数组中当前被处理的元素)
3、index(当前元素在数组中的索引)
4、array(调用reduce的数组)
initialValue(作为第一次调用callback的第一个参数。)
实例解析reduce()initialValue参数
先看第一个例子:
vararr=[1,2,3,4];
varsum=arr.reduce(function(prev,cur,index,arr){
console.log(prev,cur,index);
returnprev+cur;
})
console.log(arr,sum);
打印结果:
121
332
643
[1,2,3,4]10
这里可以看出,上面的例子index是从1开始的,第一次的prev的值是数组的第一个值。数组长度是4,但是reduce函数循环3次。
再看第二个例子:
vararr=[1,2,3,4];
varsum=arr.reduce(function(prev,cur,index,arr){
console.log(prev,cur,index);
returnprev+cur;
},0)//注意这里设置了初始值
console.log(arr,sum);
打印结果:
010
121
332
643
[1,2,3,4]10
总之,这个例子index是从0开始的,第一次的prev的值是我们设置的初始值0,数组长度是4,reduce函数循环4次。