JavaScriptのSetオブジェクトは、複数のユニークなプリミティブ値、あるいはオブジェクトの参照を保持するために使う。つまり集合(=Set)を扱うオブジェクトである。

Setオブジェクトとは

Setオブジェクトは値の集合だ。各値は、その集合の中でユニークであることが保証される。

また、Setオブジェクトへの値の挿入は、同オブジェクトのadd()メソッドによって行われる。挿入された値は、for...ofループによって挿入順に取り出せる。

プロパティ

[プロパティ名 概要
size Setオブジェクトが保持する値の数。配列のlengthみたいなもの

あと派生クラスで親のSetを参照する用?のSet[Symbol.species]みたいな静的プロパティも持つが、よくわからないので割愛する。

値の操作/確認系メソッド

メソッド名 概要
add(value) 渡された値をSetオブジェクトに追加し、追加後のオブジェクトを返す。
clear() Setオブジェクトの値を全て削除し、何も返さない(undefinedが返る)。
delete(value) 渡された値をSetオブジェクトから削除し、成功したらtrue、失敗したら(値が存在しなかったら)falseを返す。
has(value) 渡された値がSetオブジェクトに存在するかどうかを真偽値で返す。

イテレータ系メソッド

メソッド名 概要
entries() [value,value]という形の値を保持するイテレータオブジェクトを返す。
forEach(callback, thisArg) そのSetオブジェクトが保持する値ごとにコールバックを実行する。コールバックは、引数の1つ目と2つ目に当該の値、3つ目に元のSetオブジェクトを受け取る。thisArgはオプションで、コールバックのthisに指定したい値を指定する。
values() それぞれの値を含むイテレータオブジェクトを返す。
keys() values()のエイリアス。
[Symbol.iterator]() values()と同じ値を返す。

集合演算系メソッド

メソッド名 概要
difference(Set or Set-like) 渡されたSetオブジェクトとの差集合のSetオブジェクトを返す。
intersection(Set or Set-like) 渡されたSetオブジェクトとの積集合のSetオブジェクトを返す。
isDisjointFrom(Set or Set-like) 渡されたSetオブジェクトと共通の要素を持たないかどうかを真偽値で返す。
isSubsetOf(Set or Set-like) 渡されたSetオブジェクトのサブセットかどうかを真偽値で返す。
isSupersetOf(Set or Set-like) 渡されたSetオブジェクトのスーパーセットかどうかを真偽値で返す。
symmetricDifference(Set or Set-like) 渡されたSetオブジェクトとSetオブジェクトの、どちらかだけに存在する要素の集合を返す。
union(Set or Set-like) 渡されたSetオブジェクトとの和集合を返す。

Set-likeなオブジェクト

集合演算系のメソッドでは、Setオブジェクトだけでなく、Set-likeなオブジェクトもSetと同様に扱うことができる。

Set-likeなオブジェクトと判定される条件は、以下の通りである。

  • 数字を保持するsizeプロパティを持っている。
  • 受け取った要素が含まれるかどうかを真偽血で返すhasメソッドを持っている。
  • そのセットのイテレータを返すkeys()メソッドを持っている。

例えば、Mapオブジェクトが該当する。

参考資料