JS: Set Union, Intersection, Difference 📜
Set Union, Intersection, Difference
They are added in JS2024.
Union of Sets
/* return a union of all sets. Does not modify args. Version: 2016-11-18 */ const xah_set_union = (...sets) => { let X = new Set(); sets.forEach((S) => S.forEach((e) => X.add(e))); return X; }; // HHHH------------------------------ // test let s1 = new Set([3, 4, 5]); let s2 = new Set([5, 6]); let s3 = new Set([11, 12]); console.log(xah_set_union(s1, s2, s3)); // Set { 3, 4, 5, 6, 11, 12 }
Intersection of Sets
/* return the intersection of all sets. Does not modify args. Version: 2016-11-18 */ const xah_set_intersection = (...sets) => sets.reduce( (A, B) => { let X = new Set(); B.forEach((v) => { if (A.has(v)) X.add(v); }); return X; }, ); // HHHH------------------------------ // test let s1 = new Set([3, 6, 4, 5]); let s2 = new Set([6, 3]); let s3 = new Set([11, 6, 12, 3]); console.log(xah_set_intersection(s1, s2, s3)); // Set { 6, 3 }
Difference of Sets
/* return the difference of all sets. That is, A - B - C - D .... Does not modify args. Version: 2016-11-18 */ const xah_set_difference = (...sets) => sets.reduce( (A, B) => { let X = new Set(A); B.forEach((v) => { if (X.has(v)) X.delete(v); }); return X; }, ); // HHHH------------------------------ // test let s1 = new Set([3, 4, 5, 6]); let s2 = new Set([5, 3]); let s3 = new Set([4]); console.log(xah_set_difference(s1, s2, s3)); // Set { 6 }