javascript - 使用解构或 forEach 进行减少 - 迭代和 Airbnb JavaScript 风格指南

标签 javascript iterator reduce airbnb-js-styleguide eslint-config-airbnb

我有一个对象:

things = {
  table: 'red',
  chair: 'green'
}

遵循 Airbnb 的 JavaScript 样式指南,我想创建一个复制此对象的函数,并将该对象的所有键设置为蓝色。

我的两个选择似乎是:

1 使用减少

function alwaysBlue(things) {
  return Object.keys(things)
    .reduce((acc, thing) => ({ ...acc, [thing]: 'blue' }), {})
}

2 使用forEach

function alwaysBlue(things) {
  const blueThings = {}
  Object.keys(things)
    .forEach(thing => (blueThings[thing] = 'blue'))
  return blueThings
}

(1) 每次迭代的解构似乎都很昂贵,但如果我要采用no-param-reassign考虑到我不能在每次迭代时附加到累加器

但是,根据 https://github.com/airbnb/javascript#iterators--nope ,应避免使用 forEach (2),而使用 map()/every()/filter()/find()/findIndex()/reduce()/some()

如果我要遵守 Airbnb 的 JavaScript 样式指南,那么哪种方法是首选方法 - 还是我还缺少其他方法?

最佳答案

我想说的一般准则是,您可以遵守您选择的编码约定,除非它们迫使您编写对性能产生负面影响的实现,并且大到足以考虑。如果是这种情况,那么您将必须牺牲编码标准才能编写性能足够好的实现。

我不知道你的真实数据是什么,但我打赌#1 会很好,如果不是,那么#2 很可能是一个很好的妥协。该指南并没有说 forEach不好,它只是不是最好

关于javascript - 使用解构或 forEach 进行减少 - 迭代和 Airbnb JavaScript 风格指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44045938/

相关文章:

java - 哪个性能更好: for each or iterator in LinkedList?

c++ - 在 for 循环中中断然后继续

JavaScript 减少数组的内部数组并创建答案数组

php - 将循环减少为一个-仅限提示

javascript - React - 根据宽度缩短字符串

javascript - IE9是否完全兼容extJS2.2

c++ - 如何用不同类型的迭代器填充 vector ?

javascript - 使用 Javascript Reduce 添加一个属性并乘以另一个属性

javascript - 基金会无法读取未定义的属性 'bg_class'

javascript - 使用 Ajax 和 PHP 保存多个复选框值