La otra respuesta funcionará bien; aquí hay otra alternativa.
// 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); }
Sin embargo, tenga en cuenta que esto no hace una comparación de igualdad profunda. Entonces
eqSet(Set([{ a: 1 }], Set([{ a: 1 }])
devolverá falso. Si los dos conjuntos anteriores deben considerarse iguales, debemos recorrer ambos conjuntos haciendo comparaciones profundas de calidad en cada elemento. Estipulamos la existencia de una deepEqual
rutina. Entonces la lógica sería
// 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;
}
Qué hace esto: para cada miembro de s1, busque un miembro profundamente igual de s2. Si lo encuentra, elimínelo para que no se pueda volver a utilizar. Los dos conjuntos son profundamente iguales si todos los elementos de s1 se encuentran en s2 y s2 se agota. No probado.
Puede encontrar esto útil: http://www.2ality.com/2015/01/es6-set-operations.html .
===
es para igualdad de valor, no igualdad de objeto.