自定义 JavaScript Set 的对象相等性
ES6 Set 对象使用引用相等性来确定对象相等性,这可能不适合比较对象具有相同的值但不同的参考。为了解决这个问题,我们探讨了自定义 Set 对象的相等性的必要性,以实现深度对象比较。
不幸的是,ES6 Set 对象目前不提供任何方法或可扩展性来自定义其比较算法。 .has()、.add() 和 .delete() 方法仅依赖于对象或原始值引用比较。
虽然可以创建从 Set 派生的自定义对象并重新定义 .has ()、.add() 和 .delete() 方法来实现深度对象比较逻辑,这种方法会对性能产生负面影响,因为在调用原始 .add() 方法之前需要进行计算密集型的强力迭代来查找匹配项。
正如 ES6 专题文章中所讨论的,由于维护效率和处理可变对象方面的挑战,映射和集合中可自定义键和值比较的实现已被推迟。该提案建议使用回调来指定相等性或采用类似于 Java 的 equals() 方法的方法,该方法依赖于不可变对象(值对象)进行基于值的比较。然而,后一种方法在处理可变对象时会带来挑战,因为对象内容的更改需要调整其在集合中的位置。
当前,有人建议在 JavaScript 中包含记录和元组。这些不可变数据结构支持使用 === 或 !== 进行直接基于值的比较。此外,该提案建议使用 Record 和 Tuple 值作为 Set 和 Map 对象中的键,有效解决 Sets 中深度对象比较的原始问题。该提案仍在制定中,有待进一步完善和采纳。
以上是如何在 JavaScript Set 中实现深度对象比较?的详细内容。更多信息请关注PHP中文网其他相关文章!