Piszemy polyfille dla funkcji reduce oraz reduceRight. Do dzieła.
Reduce:
Array.prototype.myReduce= function(callbackFn, initialValue) {
var accumulator = initialValue;
for (var i = 0; i < this.length; i++) {
if (accumulator !== undefined) {
accumulator = callbackFn.call(undefined, accumulator, this[i], i, this);
} else {
accumulator = this[i];
}
}
return accumulator;
}
Użycie:
let sum = [1,2,3].myReduce(function(acc, curr){
return acc + curr;
},0);
console.log(sum);
//6
reduceRight:
Array.prototype.myReduceRight= function(callbackFn, initialValue) {
var accumulator = initialValue;
for (var i = this.length - 1; i >= 0; i--) {
if (accumulator !== undefined) {
accumulator = callbackFn.call(undefined, accumulator, this[i], i, this);
} else {
accumulator = this[i];
}
}
return accumulator;
}
Użycie:
let right = [1,2,3].myReduceRight((acc, val) => acc - val, 10);
console.log(right);
//4
Jedyne, co tu mamy podchwytliwego, to jak podejść do sytuacji, w których initialValue nie zostało przekazane. Inne polyfille nie będą takie proste!