集合したい(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"]のように追加が必要です)。

リファレンス