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