最近引入的 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中文网其他相关文章!