在 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中文网其他相关文章!