猿问

如何为JavaScript Set自定义对象相等性

如何为JavaScript Set自定义对象相等性

新的ES 6(Harmony)引入了新的Set对象。Set使用的身份算法类似于===运算符,因此不太适合比较对象:

var set = new Set();set.add({a:1});set.add({a:1});console.log([...set.values()]); // Array [ Object, Object ]

如何自定义Set对象的相等性以进行深层对象比较?有没有像Java这样的东西equals(Object)


慕容708150
浏览 1271回答 3
3回答

千万里不及你

平等关系的定制可能是不可能的。下面的代码概述了计算效率(但内存昂贵)的解决方法:class GeneralSet {     constructor() {         this.map = new Map();         this[Symbol.iterator] = this.values;     }     add(item) {         this.map.set(item.toIdString(), item);     }     values() {         return this.map.values();     }     delete(item) {         return this.map.delete(item.toIdString());     }     // ...}每个inserted元素都必须实现toIdString()返回string的方法。当且仅当它们的toIdString方法返回相同的值时,才认为两个对象是相等的。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答