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//传入初始值为100var 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);复制代码