(標準組み込みオブジェクト > Set)
https://zenn.dev/oreo2990/articles/5ccc8323874560
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Set
Setとは、Arrayと似た(キーなしの)値のコレクションである。Arrayとは、主に下記のような違いがある。
- 値が一意である(重複して持つことができない)
- 列挙可能でない(インデックスでアクセスできない)
Setの主なメソッド
- new Set(iterable)
setを作成することができる。引数に配列を与えるとその配列の値をもったsetを作成できる。 - set.add(value)
引数に値を渡して、設定することができる。 - set.delete(value)
引数に渡した値を削除することができる。また、引数に渡した値が存在すれば true、存在しなければ false を返す。 - set.has(value)
引数に渡した値が存在すれば true、存在しなければ false を返す。 - set.clear()
値を全て削除することができる。 - set.size
set の要素数を取得することができる。 - set.forEach((val1,val2,set)=>{})
.forEachメソッドで、反復処理が実行可能。第一引数(val1)と第二引数(val2)には同じ値が入り、第三引数(set)には、setオブジェクト自身が入る。
違い① 値が一意である(重複して持つことができない)
new Set()の引数にArrayを与えると、ArrayをSetオブジェクトに変換し、与えたArrayの重複値を削除することができる。
逆にSetオブジェクトをArrayに変換したい場合は、「Array.from(setオブジェクト)」やスプレッド構文を使うと変換できる。
const arr = [1, 2, 3, 3];
const a = [...new Set([1, 2, 3, 3])];
console.log(a)
>> [1, 2, 3]
// spread operatorが使えない環境下で
var unique = Array.from(new Set([1,2,2,3,3,3,4,5]));
>> [1,2,3,4,5]
違い② 列挙可能でない
Arrayではfor…inを使って、要素番号の列挙が可能だが、setでは、for…inを用いた列挙ができない。
尚、Setはイテレーターなので、Arrayと同じくfor…ofでの反復処理は可能である。
const set = new Set();
set.add("hoge1");
set.add("hoge2");
set.add("hoge3");
for(const s of set){ // for...ofで反復可能
console.log(s);
}
>> hoge1
>> hoge2
>> hoge3