অন্য উত্তর ভাল কাজ করবে; এখানে অন্য বিকল্প।
function isIn(s) { return elt => s.has(elt); }
function contains(s1, s2) { return [...s2] . every(isIn(s1)); }
function eqSet(a, b) { return contains(a, b) && contains(b, a); }
function eqSet(a, b) { return a.size === b.size && contains(a, b); }
তবে, সচেতন থাকুন যে এটি গভীর সমতার তুলনা করে না । তাই
eqSet(Set([{ a: 1 }], Set([{ a: 1 }])
মিথ্যা ফিরে আসবে। উপরের দুটি সেটকে যদি সমান হিসাবে বিবেচনা করা হয় তবে প্রতিটি উপাদানকে গভীর মানের তুলনা করে আমাদের দুটি সেট দিয়ে পুনরাবৃত্তি করতে হবে। আমরা একটি deepEqual
রুটিনের অস্তিত্বকে স্থির করি । তাহলে যুক্তি হবে
function findDeepEqual(s, v) { return [...s] . find(m => deepEqual(v, m)); }
function eqSetDeep(s1, s2) {
return [...s1] . every(a1 => {
var m1 = findDeepEqual(s2, a1);
if (m1) { s2.delete(m1); return true; }
}) && !s2.size;
}
এটি কী করে: এস 1 এর প্রতিটি সদস্যের জন্য, s2 এর গভীর সমান সদস্যের সন্ধান করুন। যদি পাওয়া যায়, এটি মুছুন যাতে এটি আর ব্যবহার করা যায় না। দুটি সেট গভীরভাবে সমান যদি S1 মধ্যে সব উপাদান S2 পাওয়া যায়, এবং S2 ক্লান্ত হয়। নিরীক্ষিত।
আপনি এটি দরকারী খুঁজে পেতে পারেন: http://www.2ality.com/2015/01/es6-set-operations.html ।
===
মান সমতা জন্য নয়, সমতা অবজেক্ট।