다른 대답은 잘 작동합니다. 여기에 또 다른 대안이 있습니다.
// Create function to check if an element is in a specified set.
function isIn(s) { return elt => s.has(elt); }
// Check if one set contains another (all members of s2 are in s1).
function contains(s1, s2) { return [...s2] . every(isIn(s1)); }
// Set equality: a contains b, and b contains a
function eqSet(a, b) { return contains(a, b) && contains(b, a); }
// Alternative, check size first
function eqSet(a, b) { return a.size === b.size && contains(a, b); }
그러나 이것은 깊은 동등성 비교를 수행 하지 않습니다 . 그래서
eqSet(Set([{ a: 1 }], Set([{ a: 1 }])
거짓을 반환합니다. 위의 두 세트가 동일한 것으로 간주되는 경우 각 요소에 대해 심층적 인 품질 비교를 수행하여 두 세트를 반복해야합니다. 우리는 deepEqual
일상 의 존재를 규정합니다 . 그러면 논리는
// Find a member in "s" deeply equal to some value
function findDeepEqual(s, v) { return [...s] . find(m => deepEqual(v, m)); }
// See if sets s1 and s1 are deeply equal. DESTROYS s2.
function eqSetDeep(s1, s2) {
return [...s1] . every(a1 => {
var m1 = findDeepEqual(s2, a1);
if (m1) { s2.delete(m1); return true; }
}) && !s2.size;
}
이것이하는 일 : s1의 각 구성원에 대해 s2의 동일한 구성원을 찾습니다. 발견되면 다시 사용할 수 없도록 삭제하십시오. s1의 모든 요소가 s2에서 발견 되고 s2가 소진되면 두 세트는 매우 동일합니다 . 테스트되지 않았습니다.
http://www.2ality.com/2015/01/es6-set-operations.html에서 유용 할 수 있습니다 .
===
객체 평등이 아니라 가치 평등을위한 것입니다.