实现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
}
发表回复