Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Day226:用 reduce 实现 map 方法 #1045

Open
Genzhen opened this issue Jan 22, 2021 · 1 comment
Open

Day226:用 reduce 实现 map 方法 #1045

Genzhen opened this issue Jan 22, 2021 · 1 comment
Labels
JavaScript teach_tag

Comments

@Genzhen
Copy link
Collaborator

Genzhen commented Jan 22, 2021

每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案
欢迎大家在下方发表自己的优质见解
二维码加载失败可点击 小程序二维码

扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁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]
@Genzhen Genzhen added the JavaScript teach_tag label Jan 22, 2021
@chensiguo
Copy link

return this.reduce((pre, cur, index, arr) => {
    return pre.concat(fn.call(thisArg, cur, index, arr));
  }, []);;

这样会不会更好呢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
JavaScript teach_tag
Projects
None yet
Development

No branches or pull requests

2 participants