3

手写 reduce

reduce() 方法对数组中的每个元素执行一个由您提供的 reducer 函数(升序执行),将其结果汇总为单个返回值

reducer 函数接收 4 个参数:

  • Accumulator (acc) (累计器)
  • Current Value (cur) (当前值)
  • Current Index (idx) (当前索引)
  • Source Array (src) (源数组)

您的 reducer 函数的返回值分配给累计器,该返回值在数组的每个迭代中被记住,并最后成为最终的单个结果值。

回调函数第一次执行时,accumulatorcurrentValue 的取值有两种情况:

  • 如果调用 reduce()时提供了 initialValue,accumulator 取值为 initialValue,currentValue 取数组中的第一个值;
  • 如果没有提供 initialValue,那么 accumulator 取数组中的第一个值,currentValue 取数组中的第二个值。

arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

代码

Array.prototyp.reduce=fuction(fn,accumulator){

  if(typeof fn !== "function"){
    throw "参数必须为函数"
    }
   //get array going to be iterated
  let arr = this;
  if(!Array.isArray(arr)){
    throw "只能对数组使用reduce方法"
    }

  let index = 0;

  if(!accumulator){
    index = 1;
    accumulator = arr[0];
    }

  for(;index<arr.length;index++){
    let invokedReturn = fn(accumulator ,arr[index],index,arr);
    accumulator = invokedReturn ;
 }
 return accumulator ;
}

xiaoping
337 声望12 粉丝

保持学习,记一下自己的学习经历


« 上一篇
手写 some
下一篇 »
手写 flat