手写 reduce
reduce()
方法对数组中的每个元素执行一个由您提供的 reducer
函数(升序执行),将其结果汇总为单个返回值
reducer
函数接收 4 个参数:
- Accumulator (acc) (累计器)
- Current Value (cur) (当前值)
- Current Index (idx) (当前索引)
- Source Array (src) (源数组)
您的 reducer
函数的返回值分配给累计器,该返回值在数组的每个迭代中被记住,并最后成为最终的单个结果值。
回调函数第一次执行时,accumulator
和 currentValue
的取值有两种情况:
- 如果调用 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 ;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。