現代的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 … 英語版。日本語版は「不完全」らしいので