相同的問題:
您有一個屬性數組
您想要縮短長數組以獲取與這些屬性匹配的條目。使用數組屬性縮短數組的性能,帶下劃線
1. _.map( ... function() { .findWhere });
2. _.filter (... function() { .contains });
。我把這個[Demo]
的迭代的數量是一定的比較,但它運行得更快?
相同的問題:
您有一個屬性數組
您想要縮短長數組以獲取與這些屬性匹配的條目。使用數組屬性縮短數組的性能,帶下劃線
1. _.map( ... function() { .findWhere });
2. _.filter (... function() { .contains });
。我把這個[Demo]
的迭代的數量是一定的比較,但它運行得更快?
答案已經存在於underscore.js文檔中,但隱藏了。
地圖
_.map(列表,iteratee,[上下文])別名:收集由通過變換函數 (iteratee)映射在列表中的每個值將產生的值的一個新的數組。如果list是一個JavaScript對象,iteratee的 參數將是(value,key,list)。
濾波器
_.filter(列表,謂語,[上下文])別名:選擇看起來通過列表中的每個值,返回該通過一個 真理的所有值的陣列測試(謂詞)。
包含
_.contains(列表,值)別名:包括返回true如果該值是存在於列表中。如果list是一個Array,則在內部使用indexOf。
findWhere
_.findWhere(列表屬性)看起來通過列表並返回匹配所有在 屬性中列出的鍵 - 值對的第一個值。
如果未找到匹配項,或者列表爲空,則返回undefined。
Map產生一個新的數組。所以它需要在循環時爲內存分配和引用工作背景,而過濾器將循環並返回那些通過真實測試的項目的引用。 包含返回布爾值,而find找到第一個匹配的項目。越來越多的後臺工作。 表現不僅取決於循環的工作次數,還取決於所完成的工作總量。:)
請自行檢查結果:jsperf
好@PraveenPrasannan已經做了[測試](http://stackoverflow.com/a/27616368/2841279) –