0
点赞
收藏
分享

微信扫一扫

手写reduce方法

奋斗De奶爸 2022-04-18 阅读 87

原生reduce接收几个参数?

  1. 一个回调函数。这个回调函数的前两个参数,分别表示累积值和当前值。
  2. 初始值。

实现原生reduce的思路

  1. 通过slice原型方法获取到调用reduce的数组。
  2. 定义一个临时结果变量和开始的索引。
  3. 如果传入了初始值,res就等于这个初始值,没有传入res就等于数组的第一项。
  4. 如果传入了初始值,起始索引就是0,没有传入起始所以就是1,这里的1代表的是数组的第二项。
  5. 从起始下标开始遍历,res = fn.call(null,res,arr[i])
Array.prototype.myReduce = function (fn, initialValue) {
    var arr = Array.prototype.slice.call(this);
    var res, startIndex;
    res = initialValue ? initialValue : arr[0]; // 不传默认取数组第一项
    startIndex = initialValue ? 0 : 1;
    for (var i = startIndex; i < arr.length; i++) {
        // 把初始值、当前值、索引、当前数组返回去。调用的时候传到函数参数中 [1,2,3,4].reduce((initVal,curr,index,arr))
        res = fn.call(null, res, arr[i]);
    }
    return res;
}

const test = [1,2,3];
console.log(test.myReduce((pre,cur) => pre + cur));

总结与思考

举报

相关推荐

0 条评论