关于javascript:实现reduce方法

 实现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
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理