JavaScriptでSet演算

重複する値を許さないコレクションSetで、python,rubyでは集合演算の機能が提供されていますが、jsではありません。 なので演算したい場合は自分で書かなければなりません


let s = new Set([1,2,3,4,5,6,7,8,9]);

//積集合
var t = new Set([...s].filter(x=>((new Set([1,5,9])).has(x))));
console.log(t);

//和集合
t.clear();//初期化
[...s,...(new Set([1,5,9]))].forEach(x=>t.add(x));
console.log(t);

//差集合
t.clear();
[...s].filter(x=>(!(new Set([1,5,9])).has(x))).forEach(x=>t.add(x);
console.log(t);

やり方として、Setは配列をコンストラクタの引数とするので、一度[…s]として、集合を配列に戻し、それぞれの演算を行います。

s1 = new Set([1,2,3]);
s2 = new Set([2,3,4]);
//積配列の作成
[...s1].filter(x=>s2.has(x));

//和配列の作成
[...s1,...s2];

//差配列の作成
[...s1].filter(x=>!s2.has(x));

出来た配列をコンストラクタに突っ込むか、全てをaddメソッドで突っ込むかで完成です。