【发布时间】:2015-09-16 16:39:28
【问题描述】:
你如何比较两个 javascript 集?我尝试使用 == 和 === 但都返回 false。
a = new Set([1,2,3]);
b = new Set([1,3,2]);
a == b; //=> false
a === b; //=> false
这两个集合是等价的,因为根据定义,sets do not have order(至少通常不会)。我查看了the documentation for Set on MDN 并没有发现任何有用的东西。有人知道怎么做吗?
【问题讨论】:
-
两个集合是两个不同的对象。
===用于值相等,而不是对象相等。 -
迭代并比较每个成员的值,如果都相同,则设置为“相同”
-
@dandavis 对于集合,成员是值。
-
Sets 和 Maps 确实有一个顺序,即插入顺序 - 无论出于何种原因:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
最糟糕的是,甚至是
new Set([1,2,3]) != new Set([1,2,3])。这使得 Javascript Set 对于 sets of sets 毫无用处,因为超集将包含重复的子集。想到的唯一解决方法是将所有子集转换为数组,对每个数组进行排序,然后将每个数组编码为字符串(例如 JSON)。
标签: javascript set ecmascript-6