如何为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
提交
取消
