0%

原版

1
Array.prototype.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

自己动手

1
2
3
4
5
6
7
8
Array.prototype.myReduce = function(callback, initialValue) {
let accumulator = initialValue ? initialValue : this[0]; // 第一次使用判断时候有initialValue参数,如果有用他,没有用this[0],这里this指的是传入的数组,this[0]就是数组第一项
for (let i = initialValue ? 0 : 1; i < this.length; i++) { // 如果有初始值从0开始循环,不然从1开始
let _this = this; // 保留当前this指向
accumulator = callback(accumulator, this[i], i, _this); //
}
return accumulator; // 返回迭代器的终值
};

试用一下

1
2
3
4
5
6
7
let arr = [1, 2, 3, 4];
let sum = arr.myReduce((acc, val) => {
acc += val;
return acc;
}, 5);

console.log(sum); // 15