JavaScript MapとSet、WeakMapとWeakSet
Mapリソース構造
Mapのキーにはすべての値があります.サイズを簡単に取得し、挿入順に繰り返します.
いつ使いますか。
鍵が実行前に不明であり、すべての鍵が同じタイプであり、すべての値が同じタイプである場合、 マッピングの代替の使用
個々の要素ごとに論理を適用する必要がある場合はobjectsを使用します.
WeakMap
WeakMapは鍵で、オブジェクトタイプのみ使用できます.Symbolなどの元の値はWeakMapの鍵として使用できません.
ビルトインWeakMapには、キーオブジェクトの弱参照のみが含まれます.そのため,内蔵WeakMapはゴミ収集を防止せず,ゴミ収集鍵参照も消滅する.マッピングの値も「弱」参照であり、ゴミ収集はブロックされません.WeakMapは、鍵がゴミ収集されていない場合にのみ、価値のある情報を鍵に関連付ける非常に有用な構造です.
Set資料構造
オブジェクトは値の集合です.格納された要素は、入力された順序で繰り返し処理できます.Setでは重複する値は許可されません.したがって、特定の値はセット内に1つしか存在しません.
従来のアレイと比較したメリット
indexOf法を使用して、アレイ内に特定の要素が存在するか否かを決定するのは遅い.
アレイでは、これらの要素をアレイから切り取る必要があります. Setオブジェクトは、要素の値として要素を削除する機能を提供します.(has、delete、add)(複数のタイプを追加できます)
配列にはindexOf法としてNaNが見つからない.
Setオブジェクトは値の一意性を保証するため、要素の重複性を直接チェックする必要はありません.
WeakSet
オブジェクトは、オブジェクトを格納するコレクションです. WeakSetに重複するオブジェクトはなく、WeakSetの要素はリストできません.
Setとの最大の違いは,WeakSetがSetと異なり,WeakSetはオブジェクトの集合であり,オブジェクトのみを格納できることである.特定のタイプの値は保存できません.
WeakSetには弱い参照があります.WeakSetのオブジェクトへの参照は弱い接続です.WeakSetに格納されたオブジェクトへの参照がない場合は、ゴミ収集の対象となります.
したがって、現在格納されているオブジェクトにはリストがなく、WeakSetは列挙オブジェクトではありません.
Set、Mapのデータ構造を巡回するには、次の手順に従います。
1.forEachメソッドによる巡回
Map, Setで forEach([MapまたはSet].prototype.forEach) Array forEach(Array.prototype.forEach)に似ています 違います.
ArrayのforEachが受信したコールバック関数の引数は順番に 値、 索引、 整列 順序よく入るでも. Map, Setで forEach受信コールバック関数の引数は順番に 値、 キー、 「オブジェクト」(MapまたはSet)に入ります.
Setのコールバック関数はkeyではなくvalue 2です.value 2はvalueと同じです.次の例と「単一の値で巡回」 説明 確認してください.
// JavaScript
const map = new Map();
const set = new Set();
// TypeScript
const map = new Map<string, string>();
const set = new Set<string>();
map.set('name', 'Mommoo');
map.set('age' , 'secret');
set.add('Mommoo');
set.add('secret');
map.forEach((value, key, mapObject) => console.log(key +' , ' +value));
// name , Mommoo
// age , secret
set.forEach((value1, value2, setObject) => console.log(value1 +' , '+ value2));
// Mommoo , Mommoo
// secret , secret
2. for.. 使用する文法を巡回する
forEach 方法はツアー期間中です. continue, break, return 同じループ機能は使用できませんが、新しいES 6(ES 2015) for.. of 文法を使用する場合は、可能です.Map for.. 呼び出しの値は 身長と ベイリュー 整列 .しゅうごう for.. 呼び出しの値は ベリューです.
const map = new Map();
const set = new Set();
map.set('name', 'Mommoo');
map.set('age' , 'secret');
set.add('Mommoo');
set.add('secret');
for ( let item of map ) {
console.log(item[0] +' , '+ item[1]);
}
// name , Mommoo
// age , secret
for ( let item of set ) {
console.log(item);
}
// Mommoo
// secret
TypeScriptはちょっと苦手です.理由はIterable属性type iterable属性for...の非コンパイル.Reference
この問題について(JavaScript MapとSet、WeakMapとWeakSet), 我々は、より多くの情報をここで見つけました https://velog.io/@kokoball0/JavaScript-Map과-Set-WeakMap과-WeakSetテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol