JS原生函数实现之数组实例方法map/reduce

1
2
3
4
5
6
7
8
9
10
11
12
Array.prototype.map2 = function (fn, thisVal) {
if (typeof fn != 'function') {
throw new Error(fn + 'should be function');
}
if (this.length == 0) {
return [];
}
return this.reduce((arr, curVal, curIndex) => {
arr.push(fn.call(thisVal, curVal, curIndex, this));
return arr;
}, [])
};

1
2
3
4
5
6
7
Array.prototype.reduce2 = function (callback, initData) {
let initVal = initData ? initData : initData == 0 ? initData : this[0];
for (let i = initData ? 0 : initData == 0 ? 0 : 1; i < this.length; i++) {
initVal = callback(initVal, this[i], i, this)
}
return initVal;
}