Array.prototype.reduce(callback, initialValue?)nitialValue为可选,写了nitialValue值那么函数的初始值为该nitialValue值,如果没有,那么函数数组的第一个值为初始值。
var arr = [1,2,5,50,3];
//没有传入初始值
var a = arr.reduce(function(preTotal, ele, index){
return preTotal + ele;
})
console.log(a);//61
//传入初始值为100
var b = arr.reduce(function(preTotal, ele, index){
return preTotal + ele;
},100)
console.log(b);//161
上面的函数中3个参数:preTotal:初始值,ele:当前元素,index:当前元素索引。详细分析如下图:(左边为a,右边为b)
var arr = [1,2,5,50,3];
Array.prototype.myReduce = function(fn, init){
var len = this.length;
var pre = init;
var i = 0;
//判断是否传入初始值
if(init == undefined){
//没有传入初始值,数组第一位默认为初始值,当前元素索引值变为1。
pre = this[0];
i = 1;
}
for(i; i < len; i ++){
//当前函数返回值为下一次的初始值
pre = fn(pre, this[i], i)
}
return pre;
}
var add = arr.myReduce(function(preTotal, ele, index){
return preTotal + ele;
},100)
console.log(add);