FE-Interview
FE-Interview copied to clipboard
Day226:用 reduce 实现 map 方法
每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案 欢迎大家在下方发表自己的优质见解 二维码加载失败可点击 小程序二维码
扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。
reduce & map
reduce 是一个累加方法,是对数组累积执行回调函数,返回最终计算的结果。
array.reduce(function (total, currentValue, currentIndex, arr) {},
initialValue);
- total 必需:初始值,或者计算结束后返回的值
- curentValue 必需:当前元素
- currentIndex 可选:当前元素的索引
- arr 可选,当前元素的所属的数组对象
- initialValue 可选:传给函数的初始值
map 是遍历数组的每一项,并执行回调函数的操作,返回一个对每一项进行操作后的新数组。
array.map(function (crrentValue, index, arr) {}, thisArg);
-
currentValue 必需:当前元素只
-
index 可选:当前元素索引值
-
arr 可选:当前元素所属数组对象
-
thisArg 可选:对象作为该执行回调时使用,传递给函数,用作 "this" 的值。如果省略了 thisArg,或者传入 null、undefined,那么回调函数的 this 为全局对象。
-
参考实现
Array.prototype.myMap = function (fn, thisArg = []) {
if(typeof fn !== function){
throw new Error(`${fn} is not a function`);
}
return this.reduce((pre, cur, index, arr) => {
return pre.concat(fn.call(thisArg, cur, index, arr));
}, []);
};
var arr = [2, 3, 1, 5];
arr.myMap(function (item, index, arr) {
console.log(item, index, arr);
});
let res = arr.myMap((v) => v * 2);
console.log(res); // [4,6,2,10]
return this.reduce((pre, cur, index, arr) => {
return pre.concat(fn.call(thisArg, cur, index, arr));
}, []);;
这样会不会更好呢