現代的JavaScriptおれおれアドベントカレンダー2017 – 20日目

概要

Map のキーだけを保持する版です。

const set = new Set();
set.add(1);
set.add(2);

console.log(set.size);  // 2
console.log(set.has(2));  // => true

使い方

なんとなく Map と同じ感じ。ただし値を追加するのは set() じゃなくて add() になってます。

// 作成
const set = new Set();

// 追加
set.add(1);
set.add(2);
set.add(3);
set.add(1);  // 同じ値は無視される

// 有無
console.log(set.has(2));  // => true

// 削除
set.delete(2);
console.log(set.has(2));  // => false

// サイズ
console.log('Size:', set.size);  // 2

// 反復
set.forEach((value) => {
    console.log('forEach', value);
})

for (let value of set) {
    console.log('for-of', value);
}

// 値だけまとめて取得
const values = set.values();

// 全削除
set.clear();

keys() もある

ただし keys()values() は完全に同じ関数です。

console.log(set.keys === set.values);  // => true

あと entries() もあって、なんか想像通りの変な感じの結果を返します。インターフェイスを統一する的なやつなんだろか。

その他

キー vs 値

Set の仕様内では “value” という表現を使ってるっぽい。でも重複しないという特性はキーっぽいよね。

参考