2016-06-30 28 views
0

我看到.map().forEach()在大多數情況下工作類似,但我知道.map()更適合基於轉換輸入返回一些結果,而.forEach()只是對項目進行迭代並對每個項目應用一些操作。即使.forEach在來臨環境中看起來更符合邏輯,我是否仍然可以使用.map?

我知道在這種情況下很相稱:

var customersList = dataItems.map(function (item) { 
    return item.isCustomer 
}) 

但我覺得它更容易隨便扔.forEach()了我的頭,只是使用.map()在我的所有代碼。在這種情況下使用.map()在概念上是否正確?

domElements.map(function (el) { 
    if (el.enabled) { 
     el.show() 
    } else { 
     el.hide() 
    } 
}) 
+1

不會使用'map',因爲如果你不需要它,所有的'undefined'項目都會存儲一個臨時數組的開銷。 –

+0

'forEach'對原始數組元素進行操作。如果你不擔心突變,你可以隨時使用它。 – ftor

+0

你應該使用最適合的情況。 – kazenorin

回答

2

您可以。但你不應該。

這是輕微的表現打擊,但更重要的是它也是一個維護負擔。如果我不得不一起來維護你的代碼,我會認爲出了什麼問題,或者不得不花費更長時間看那段代碼來衡量意圖。爲什麼map在那裏?它應該返回一些東西嗎?我的理解不正確嗎?

這比性能更重要。

0

正如有人在評論中指出的那樣,map()的性能會降低,因爲它會返回一個新的數組。一個沒有明確返回任何東西的函數會返回undefined,所以你的map將返回一個未定義的數組,其元素個數與原始數組相同。

如果你不想記住或者每次需要迭代一個數組的時候都需要谷歌地記住所有這些方法,那麼只要堅持到老的for循環就行了。如果你關心性能,你可以寫下類似的東西:

for (var i = 0, len = arr.length; i < len; i++) 

它幾乎和向後循環一樣快。

+0

我認爲它不是關於性能,更多的是關於惰性編碼。 –

相關問題