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オブジェクトが該当する。