在 ES6 (Harmony) 中,新的 Set 物件引入了其元素的參考相等性。然而,這種行為可能並不總是適合深入比較對象。
考慮以下程式碼片段:
var set = new Set(); set.add({a:1}); set.add({a:1}); console.log([...set.values()]); // Array [ Object, Object ]
你可以看,即使兩個物件具有相同的屬性和值,由於引用相等,它們也被認為是不同的。
不幸的是,ES6 Set 物件不提供用於自訂相等比較的內建方法。擴展它以覆蓋比較邏輯也將具有挑戰性。
雖然不直接支援 Set 物件的自訂比較,但您可以考慮使用替代資料結構或技術:
1。不可變值對象:
回應中提到的文章建議使用不可變值對象,這將允許 Set 使用深度值比較。然而,這目前還不是 JavaScript 中的標準。
2.具有深度比較的自訂資料結構:
您可以建立自己的自訂資料結構,該結構繼承自Set 並覆寫使用物件識別的方法。然而,這需要完全重寫 Set 實現,這對於大型集合來說效率不高。
以上是如何實作 JavaScript Set 物件中元素的深度相等比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!