【每日记录】JS-手写实现reduce方法

228 阅读1分钟

数组reduce基础使用

定义:

对数组中的每个元素执行一个自定义的累计器,将其结果汇总为单个返回值。

形式:

array.reduce((t, v, i, a) => {}, initValue)

参数:

  • callback:回调函数(必选)

  • initValue:初始值(可选)

回调函数的参数

  • total(t):累计器完成计算的返回值(必选)

  • value(v):当前元素(必选)

  • index(i):当前元素的索引(可选)

  • array(a):当前元素所属的数组对象(可选)

过程

  1. t作为累计结果的初始值,不设置t则以数组第一个元素为初始值
  2. 开始遍历,使用累计器处理v,将v的映射结果累计到t上,结束此次循环,返回t
  3. 进入下一次循环,重复上述操作,直至数组最后一个元素
  4. 结束遍历,返回最终的t

reduce的精华所在是将累计器逐个作用于数组成员上,把上一次输出的值作为下一次输入的值

手写实现reduce累加器

Array.prototype.reduce = function (fn,p) {
    let arr = this
    let res = p || arr[0]

    for(let i= p?0:1;i<arr.length;i++){
        res = fn(res,arr[i],i,arr)
    }

    return res
}

let arr = [1,2,3,4,5,6]

let res1 = arr.reduce((pre,item,index,arr)=>{
    return pre+item
},0)

let res2 = arr.reduce((pre,item,index,arr)=>{
    return pre+item
},0)

console.log(res1)
console.log(res2)

使用参考

25个你不得不知道的数组reduce高级用法