实现reduce办法
Array.prototype._reduce = function (fn, initial) { // 是否有初始值 留神这里初始值传undefined或者null都为没有初始值 然而空代表有值 let hasInitial = initial != undefined // 如果有初始值循环从0开始 否则为1 let index = hasInitial ? 0 : 1 let acc = this[0] let cur // 如果有初始值 则间接赋值给acc if (hasInitial) { acc = initial } // 循环一次执行回调函数 传入三个参数:每次执行的累计值 以后所遍历的项 以后遍历的index for (var i = index; i < this.length; i++) { cur = this[i] // 这里要把返回值赋值给acc acc = fn(acc, cur, i) } return acc}
reduceRight办法
Array.prototype._reduceRight = function (fn, initial) { let hasInitial = initial != undefined let index = hasInitial ? 0 : 1 let start = this.length - 1 // 不过这里默认是从右开始 let acc = this[start] let cur if (hasInitial) { acc = initial } // 循环也是从左边开始 如果有初始值从倒数第二个开始 for (var i = this.length - 1 - index; i >= 0; i--) { cur = this[i] acc = fn(acc, cur, i) } return acc}