【九】MapとSet

2188 ワード

JavaScriptのデフォルトのオブジェクト表示方式{}は、他の言語のMapまたはDictionaryのデータ構造、すなわちキーのセットと見なすことができる.しかし、JavaScriptのオブジェクトには小さな問題があります.キーは文字列でなければなりません.しかし、実際にはNumberや他のデータタイプがキーとして使用されるのも非常に合理的です.この問題を解決するために、最新のES 6仕様は新しいデータタイプMapを導入しました.あなたのブラウザがES 6仕様をサポートしているかどうかをテストします.以下のコードを実行してください.もしブラウザがReferenceErrエラーを報告したら、ES 6対応のブラウザに変えてください.
'use strict'
var m = new Map();
var s = new Set();
alert('       Map Set!');
Map
Mapはキーペアのセットで、検索速度が非常に速いです.例を挙げると、同級生の名前から対応する成績を探すとします.もしArayで実現するなら、二つのArayが必要です.
var names = ['Michael', 'Bob', 'Tracy'];
var scores = [95, 75, 85];
名前を与えて、対応する成績を探すには、まずnamesの中で対応する位置を見つけて、scoresから対応する成績を取って、Arayが長いほど時間がかかります.Mapで実現すれば、「名前」→「成績」の対照表が必要で、直接に名前によって成績を調べます.この表がどんなに大きくても、検索速度は遅くなりません.JavaScriptでMapを書きます.以下の通りです.
var m = new Map([['Michael', 95],['Bob', 75], ['Tracy'], 85]);
m.get('Michael');  //95
Mapを初期化するには二次元配列が必要であり、または空のMapを直接初期化する必要があります.Mapには以下の方法があります.
var m = new Map();   //  Map
m.set('Adam', 67);  //     key-value
m.set('Bob', 59);  
m.has('Adam');  //     key 'Adam': ture
m.get('Adam');  // 67
m.delete('Adam');  //   key 'Adam'
m.get('Adam');  // undefined
一つのキーは一つのvalueにしか対応できないので、一つのキーに対して何度もvalueに入れます.後の値は前の値を押し流します.
var m = new Map();
m.set('Adam', 67);
m.set('Adam', 88);
m.get('Adam');  // 88
セット
セットはMapと似ていて、keyのセットでもありますが、valueは記憶されていません.Keyは重複できないので、セットの中で、重複したkeyはありません.Setを作成するには、入力としてArayを提供するか、または直接に空のSetを作成する必要があります.
var s1 = new Set();  //  Set
var s2 = new Set([1, 2, 3]); //  1, 2, 3
重複要素はSetで自動的にフィルタされます.
var s = new Set([1, 2, 3, 3, '3']);
s; // Set{1, 2, 3, '3'}
注意数字3と文字列「3」は異なる要素です.add(key)法によりSetに要素を追加でき、繰り返し追加できますが、効果はありません.
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
delete(key)方法で要素を削除できます.
var s = new Set([1, 2, 3]);
s; // Set {1, 2, 3}
s.delete(3);
s; // Set {1, 2}