JS:reduce() 源码解析

1,649 阅读1分钟
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);