2 回答
TA貢獻1802條經驗 獲得超10個贊
Array.prototype.includes是一個O(n)操作,這是不可取的 - 每次您想要檢查一個值是否存在時,您都必須迭代大部分集合(可能是整個集合)。
Map、Set 或 object 更好,因為檢查它們是否具有值是一種O(1)操作。
樹也是不可取的,因為查找必然會在樹下進行許多操作,如果樹很大并且您想要頻繁查找,這可能是一個問題 - 所以O(1)解決方案更好。
地圖雖然有效,但可能不合適,因為您只想查看值是否存在 - 您不需要鍵值對,只需要值。Set 僅由值組成(并且Set.has確實是O(1)),因此這是這種情況的最佳選擇。帶有鍵的對象雖然也可以工作,但可能不是一個好主意,因為它可能會創建許多不必要的隱藏類- Set 更適合在運行時針對動態值。
因此,Set 方法看起來是最高效和最合適的選擇。
您還可以考慮將計算移至服務器的可能性。100,000 個項目不一定太多,但在客戶端看到的數量仍然驚人。
TA貢獻1804條經驗 獲得超3個贊
非常規地,您還可以使用一個對象并將 100,000 個項目中的每一個設置為一個屬性,因為在幕后,JavaScript Object 是使用哈希表實現的。
例如,
var numbers = {
"1": 1243213,
"2": 4314121,
"3": 3142123
...
}
然后,您可以通過檢查 if 來非??焖俚貦z查項目是否存在numbers["1"] === undefined。不僅如此,您還可以同時獲得房產的價值。
然而,這種方法確實有一些缺點,比如遍歷列表變得更加復雜(盡管仍然可能)。
添加回答
舉報
