2014-12-23 23 views
0

相同的問題:
您有一個屬性數組
您想要縮短長數組以獲取與這些屬性匹配的條目。使用數組屬性縮短數組的性能,帶下劃線

我在這裏看到兩種解決方案(mapfilter)。

1. _.map( ... function() { .findWhere }); 
2. _.filter (... function() { .contains }); 

。我把這個[Demo]

的迭代的數量是一定的比較,但它運行得更快?

+0

好@PraveenPrasannan已經做了[測試](http://stackoverflow.com/a/27616368/2841279) –

回答

0

答案已經存在於underscore.js文檔中,但隱藏了。

地圖

_.map(列表,iteratee,[上下文])別名:收集由通過變換函數 (iteratee)映射在列表中的每個值將產生的值的一個新的數組。如果list是一個JavaScript對象,iteratee的 參數將是(value,key,list)。

濾波器

_.filter(列表,謂語,[上下文])別名:選擇看起來通過列表中的每個值,返回該通過一個 真理的所有值的陣列測試(謂詞)。

包含

_.contains(列表,值)別名:包括返回true如果該值是存在於列表中。如果list是一個Array,則在內部使用indexOf。

findWhere

_.findWhere(列表屬性)看起來通過列表並返回匹配所有在 屬性中列出的鍵 - 值對的第一個值。

如果未找到匹配項,或者列表爲空,則返回undefined。

Map產生一個新的數組。所以它需要在循環時爲內存分配和引用工作背景,而過濾器將循環並返回那些通過真實測試的項目的引用。 包含返回布爾值,而find找到第一個匹配的項目。越來越多的後臺工作。 表現不僅取決於循環的工作次數,還取決於所完成的工作總量。:)

請自行檢查結果:jsperf