最近引入的 ES6 Set 物件利用恆等演算法進行相等比較,類似於運算子。這種方法不太適合比較對象,如下例所示:
var set = new Set(); set.add({a:1}); set.add({a:1}); console.log([...set.values()]); // Array [ Object, Object ]
具有相同屬性的兩個對像被視為 Set 中的不同元素,因為它們不是同一個確切的對象。這種限制提出瞭如何自訂 Set 物件的相等性以促進深度物件比較的問題。
當前限制和建議的解決方案
截至目前,ES6 Set 物件缺乏內建於自訂相等比較的方法。為了解決這個問題,作者建議建立一個繼承自 Set 的派生對象,並重寫 .has()、.add() 和 .delete() 方法來執行深度物件比較。然而,這種方法效率低下,因為它沒有利用底層 Set 物件的功能。
本文引用了一項正在開發中的提案,旨在將記錄和元組引入 JavaScript。這些不可變的資料結構有望實現深度值比較,這將有效解決所描述的問題。然而,該提案仍在開發中,尚未完全實施。
其他注意事項
集合內物件比較的一些替代策略包括:
這些方法提供解決方法,但不要直接自訂 Set 物件的相等行為。
以上是如何自訂 JavaScript Set 物件的相等性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!