Open xiaohesong opened 5 years ago
//1.reduce
Array.prototype.myReduce = function (fn, prev) {
for (let i = 0; i < this.length; i++) {
if (typeof prev === 'undefined') {
prev = fn(this[i], this[i + 1], i + 1, this);
++i;
} else {
prev = fn(prev, this[i], i, this);
}
}
return prev;
}
let total = [1, 2, 3].myReduce((prev, next, currIndex, ary) => {
return prev + next
}, 0);
console.log(total);
let flat = [[1, 2, 3], [4, 5, 6]].reduce((prev, next, index, ary) => {
return [...prev, ...next];
});
console.log(flat);
// 2) forEach
Array.prototype.forEach = function (fn) {
for (let i = 0; i < this.length; i++) {
fn(this[i], i);
}
}
;[1, 2, 3].forEach((item, index) => {
console.log(item, index);
})
// 3.map
Array.prototype.map = function (fn) {
let arr = [];
for (let i = 0; i < this.length; i++) {
arr.push(fn(this[i], i));
}
return arr;
};
let arr = [1, 2, 3].map(item => {
return item * 2;
});
console.log(arr);
@terrywangt 不错哦,给你高亮显示了。之前reduce也是循环判断,最后换成了先初始化 😃
今天无意间看到一个面试题有问到如何实现一个
reduce
函数,额,花了点时间算是写下来了。写这个方法的前提是了解这个api。reduce
的第二个参数。reduce
的第一个参数(函数)的第一个参数,(函数)的第二个参数是数组的第一个参数;reduce
函数的第一个参数(函数)的第一个参数是数组的第一个元素,(函数)的第二个参数就是数组的第二个元素。所以,
reduce
函数的第一个参数(函数)的第三个参数(索引), 就是根据reduce
函数的第二个参数在数组中的牵引做的判断。好了,我们知道了这个
reduce
函数的api
之后,我们尝试来写个: