集合したい(Set)
1const set = new Set(["a1", "a2", "a1", "a3"]);
new Set()コンストラクターでSetを初期化できます。
このとき重複した値はひとつに整理されます。
値を追加したい(Set.add)
1const set = new Set();
2set.add("a1");
3set.add("a2");
4set.add("a1"); // <- 同じ値は追加されない
5set.add("a3")
addメソッドで値を追加できます。
すでに存在する値を追加しても無視されるだけで、エラーにはなりません。
値を確認・削除したい(has / delete / size)
1set.has("a1"); // -> true
2set.has("NO_VALUE"); // -> false
hasメソッドで、値が存在するか確認できます。
1set.delete("a2"); // -> true
2set.delete("NO_VALUE"); // -> false
deleteメソッドで指定した値を削除できます。
返り値はBooleanになっているので、削除できたかどうかの判定に利用できます。
1set.size; // -> 2
sizeはプロパティ(メソッドではない)で、Setオブジェクトの要素数を取得できます。
ループしたい
1for (const item of set) {
2 console.log(item);
3}
Setはそれ自体が反復可能(iterable)なので、for...ofにそのまま渡せます。
配列にしたい
1const array = Array.from(set);
2// または、スプレッド演算子でも変換できる
3const array2 = [...set];
Array.fromもしくはスプレッド演算子(...)で配列に変換できます。
配列の重複を除去したい
1const array = ["a1", "a2", "a1", "a3", "a2"];
2const uniqueArray = [...new Set(array)];
3// -> ["a1", "a2", "a3"]
配列をSetに変換してから配列に戻すと、重複した値を除去できます。
Setの代表的な使いどころのひとつです。
集合演算したい(union / intersection / difference)
1const a = new Set([1, 2, 3]);
2const b = new Set([2, 3, 4]);
3
4a.union(b); // -> Set(4) {1, 2, 3, 4} 和集合
5a.intersection(b); // -> Set(2) {2, 3} 積集合
6a.difference(b); // -> Set(1) {1} 差集合(aのみ)
7a.symmetricDifference(b); // -> Set(2) {1, 4} 対称差(どちらか一方のみ)
union(和集合)、intersection(積集合)、difference(差集合)、
symmetricDifference(対称差)で集合演算ができます。
注釈
これらのメソッドはECMAScript2025(ES2025)で追加された比較的新しい機能です。 GAS V8ランタイムでの対応状況は未確認です。 実際に使う前に対象のGASプロジェクトで動作確認してください。
tscで型チェックする場合、tsconfig.jsonのlibにES2020しか指定していないと、
これらのメソッドが型エラーになります("lib": ["ES2020", "ES2025"]のように追加が必要です)。