現代的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” という表現を使ってるっぽい。でも重複しないという特性はキーっぽいよね。
参考
- ECMAScript® 2017 Language Specification
- 23.2 Set Objects
- Set – JavaScript | MDN … 英語版。日本語版は「不完全」らしいので