【问题标题】:Array forEach() vs reduce() [closed]数组 forEach() 与 reduce() [关闭]
【发布时间】:2016-09-24 12:01:06
【问题描述】:

你认为最好的方法是什么?

减少方式:

const result = Object.keys(params).reduce(
      (previous, key) => {
        if (this.model.hasOwnProperty(key)) previous[key] = this.model[key](params[key]);
        return previous;
  }, {});

ForEach 方式:

const result = {};
Object.keys(params).forEach(key => {
      if (this.model.hasOwnProperty(key)) result[key] = this.model[key](params[key]);
    });

我正在使用 airbnb eslint,它不喜欢 reduce 方式,因为我修改了 previous (no-param-reassign)

【问题讨论】:

  • 您的两种方法都返回相同的结果?
  • 是的,只是语法问题! :)
  • 如果您不需要“汇总”数组值 - 使用 forEach 函数
  • 那你觉得@naomik anwser 怎么样?
  • 由于您询问的是 ES6,.forEach 已被 for … of 有效弃用。

标签: javascript eslint eslint-config-airbnb


【解决方案1】:

我认为reduce 更好,因为它不会将变量溢出。你可以让它更好一点,imo。

var result = Object.keys(params).reduce((res,k)=>
  this.model.hasOwnProperty(k)
    ? Object.assign(res, {[k]: this.model[k](params[k])})
    : res, {});

【讨论】:

  • 啊,Object.assign 似乎是解决 linter 的有效方法 :-)
  • 使用扩展运算符代替 object.assign
  • @skone 如果你愿意,你可以使用对象扩展 syntax,但由于它在大多数环境中不受支持,我不推荐它,除非你的项目已经有一个 transpile 步骤
  • 有道理。 ....
猜你喜欢
  • 2011-04-23
  • 2015-04-10
  • 2014-04-20
  • 2020-12-04
  • 1970-01-01
  • 2017-05-05
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多