अन्य उत्तर ठीक काम करेगा; यहाँ एक और विकल्प है।
// 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 समाप्त हो जाता है । Untested।
आपको यह उपयोगी लग सकता है: http://www.2ality.com/2015/01/es6-set-operations.html ।
===
मूल्य समानता के लिए है, वस्तु समानता नहीं है।