js 数组方法内部的实现方法

63 阅读1分钟

reduce 方法的实现

  • 作用:
    • 实现数的累加
    • 如果有初始值, 那么他会以传入的初始值开始实现累加,如果没有初始值, 他会以第一项开始进行累加
  • 描述:
    • 接收两个参数, 第一参数是一个回调函数, 第二参数为可选项, 为累加的初始值
    • 第一参数的回调函数, 四个参数, 分别为前一项、当前项、当前项索引、原数组
  • 核心: 使用了循环遍历, 实现了累加
function myReduce (callback, initalVal) {
     if (typeof callback !== 'function') {
         throw new Error('回调函数类型错误')
     }
     // 处理传入了初始值的情况
     if(initalVal){
         // 借助循环
         forlet i = 0; i < this.length; i++ ) {
           initalVal = callback(initalVal, this[i], i, this)
         }
     } else { 
         // 没有传入初始值的情况, 用第一项作为初始值
         initalVal = this[0]
         for (let i = 1; i < this.length; i++) {
             // 每次 callback 中使用的 initalVal 都是最新的, 他会查找这个作用域中的 initalVal
            initalVal = callback(initalVal, this[i], i, this )
         }   
     } 
     return initalVal // 一定要返回这个值, 是基于这值进行的运算
}

// 测试
  Array.prototype.myReduce = myReduce
    const result2 = [1, 2, 3, 4, 5].reduceFinal(function (pre, cur, index, arr) {
      // console.log('🚀 ~ This is a result of console.log ~ ✨: ', pre);
      return pre + cur
    }, 12)
    console.log('🚀 ~ This is a result of console.log ~ ✨: ', result2); // 27