Setオブジェクト

(標準組み込みオブジェクト > Set)
https://zenn.dev/oreo2990/articles/5ccc8323874560
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Set

Setとは、Arrayと似た(キーなしの)値のコレクションである。Arrayとは、主に下記のような違いがある。

  1. 値が一意である(重複して持つことができない)
  2. 列挙可能でない(インデックスでアクセスできない)

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
inserted by FC2 system