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

276

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)的东西?

5
“定制平等”是什么意思?JavaScript不允许操作符重载,因此无法对===操作符进行重载。ES6集合对象没有任何比较方法。.has()方法和.add()方法仅在它们是同一个实际对象或者原始值相同时起作用。 - jfriend00
33
“自定义相等性”指开发人员可以定义某些对象被认为是相等或不相等的任何方式。 - czerny
1
另外,https://dev59.com/b2kv5IYBdhLWcg3wghIi。 - Pacerier
1
这可能是“集合规范化”TC39提案的一部分。 (https://github.com/tc39/proposal-collection-normalization/issues/18) - Bergi
11个回答

-2
对于通过谷歌搜索并想要使用对象作为键获取Map值的人来说:
警告:这个答案并不适用于所有对象。
var map = new Map<string,string>();

map.set(JSON.stringify({"A":2} /*string of object as key*/), "Worked");

console.log(map.get(JSON.stringify({"A":2}))||"Not worked");

输出:

工作了


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接