如何为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)?
3 回答

千万里不及你
TA贡献1784条经验 获得超9个赞
平等关系的定制可能是不可能的。
下面的代码概述了计算效率(但内存昂贵)的解决方法:
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
方法返回相同的值时,才认为两个对象是相等的。
添加回答
举报
0/150
提交
取消