[英]How do I set up Prettier with Airbnb JavaScript Style Guide
[英]Reduce with deconstruction or forEach - Iteration and Airbnb JavaScript Style Guide
我有一个对象:
things = {
table: 'red',
chair: 'green'
}
遵循Airbnb的JavaScript样式指南,我想创建一个复制该对象的函数,将该对象的所有键设置为蓝色。
我的2个选项似乎是:
1使用reduce
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)每次迭代的解构似乎很昂贵,但是如果我考虑不使用参数重新分配 ,我就不能在每次迭代时都附加到累加器上
但是,根据https://github.com/ ,应避免使用for(2)来支持map()/ every()/ filter()/ find()/ findIndex()/ reduce()/ some() airbnb / javascript#iterators--不
因此,如果我坚持使用Airbnb的JavaScript样式指南,那么哪种方法是首选?或者,我是否缺少其他方法?
我想说的一般原则是,你能坚持到您选择的编码约定,除非他们强迫你写下来实现,具有足够大考虑对性能产生负面影响。 如果真是这样,那么您将不得不牺牲编码标准,才能编写出性能良好的实现。
我不知道您的真实世界数据是什么,但是我敢打赌,#1会做的很好,否则,#2很可能是一个很好的折衷方案。 指南并没有说forEach
不好 ,但这不是最好的 。
在github问题上回答(这应该是您在本指南上提出疑问的第一个也是唯一的地方):
由于这是无效的语法,因此我假设您的对象是:
things = {
table: 'red',
chair: 'green'
}
您的第一个示例带有reduce
,是正确的。 “似乎很昂贵”是您不应该担心的事情-性能是最不重要的事情,只有在代码正确,干净,经过测试和配置文件之后才需要担心。
只有在最终有必要(通过对应用程序进行完全基准测试而不是像jsperf这样的微基准测试来确定)时,才可以使用forEach方法,然后,如果仍然有必要,则将其分解for
循环。
如果您打算使用mapValues
等第三方工具, 则可以使用mapValues
:
_.mapValues(things, () => 'blue');
您可以使用Object.assign
,它不会创建新对象,而只是将项目追加到累加器。 性能会更好,并遵循样式指南。
Object.keys(things)
.reduce((acc, thing) => Object.assign(acc, {[thing]: 'blue' }), {})
只需使用一个简单的死循环:
function alwaysBlue(things) {
const blueThings = {}
for (const key in things) // or `for (const key of Object.keys(things))`
blueThings[key] = 'blue'
return blueThings
}
这些迭代方法仅适用于数组,在此不做介绍。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.