![](/img/trans.png)
[英]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.