セット、Map、WeakSet、WeakMap
4639 ワード
1.セット
Set自体はSetデータ構造を生成するためのコンストラクタである(配列に類似しているが、メンバは一意で無秩序であり、重複した値はない). Set.prototype.com nstructor:コンストラクタは、デフォルトはSet関数です. Set.prototype.size:Setのインスタンスのメンバー総数を返します. Setの例の方法は、2つのクラスに分けられる.操作方法(データを操作するための)add(value):値を追加して、Set構造自体に戻る.delete(value):ある値を削除し、ブール値を返します.削除が成功したかどうかを表します.has(value):Setのメンバーであるかどうかを示すブール値を返します.clear():全メンバーをクリアし、戻り値がない. エルゴードメソッド(メンバーを遍歴するための)keys():キーの名前を返すエルゴードvalues():キーの値を返すエルゴードターレス():キーの値ペアを返すエルゴードforEach():バックスピン関数を使用してメンバー を遍歴します.
注意:Set構造のキー名はキーの値です.
2.WeakSet WeakSet構造はSetと同様であり、重複しない値のセットでもある.ただし、WeakSetのメンバーは対象であって、他のタイプの値ではない. WeakSetの中の引用は、ゴミ回収メカニズムには含まれていませんので、メモリ漏れという問題はありません. WeakSetの内部にはどれぐらいのメンバーがいますか?ゴミ回収メカニズムが運行されているかによって、運行前後はメンバー数が違っているかもしれません.ゴミ回収メカニズムがいつ実行されるかは予測できないので、ES 6はWeakSetを遍歴してはいけないと規定しています. WeakSetはsize属性がなく、メンバーを巡回する方法がない. WeakSetの主な用途は、ドキュメントからこれらのノードが取り外されることを心配することなく、DOMノードを格納することである. 3.Map
ES 6は、Mapデータ構造を提供する.オブジェクトと同様に、キーパッドのペアのセットですが、Mapの「キー」の範囲は文字列に限定されず、各種の値(オブジェクトを含む)はキーとして使用できます.つまり、Object構造は「文字列ー値」の対応を提供し、Map構造は「値ー値」の対応を提供し、より完璧なHash構造の実現である.
Mapはパラメータとして配列を受け入れられます.この配列のメンバーはキーペアを示す配列です. Mapの例の操作方法:set(key,value):set方法設定キーキーの対応するキーの値がvalueであり、Map構造get(key):get方法でkey対応のキーの値を読み取り、keyが見つからなければundefinedに戻る.delete(key):ある値を削除し、ブール値を返します.削除が成功したかどうかを表します.has(key):Mapのメンバーであるかどうかを示すブール値を返します.clear():全メンバーをクリアし、戻り値がない. エルゴードメソッドkeys():キーの名前を返すエルゴード.values():キーのエルゴードを返します.entries():全メンバーのエルゴードを返します.forEach():Mapの全メンバーを巡回しました. 4.WeakMap WeakMap構造はMap構造と類似しており、キーペアを生成するためのセットでもある.ただし、WeakMapは対象をキー名(nullを除く)とし、他のタイプの値をキー名として受け入れることはできません. WeakMapの設計目的は、あるオブジェクトの上にいくつかのデータを格納したい場合がありますが、これはこのオブジェクトに対する参照 を形成します.
WeakMapはこの問題を解決するために誕生しました.キーの名前が引用されている対象は弱い引用です.つまりゴミ回収メカニズムはこの引用を考慮に入れません.したがって、参照されているオブジェクトの他の参照が消去されている限り、ゴミ回収メカニズムは、オブジェクトが占有しているメモリを解放します.つまり、不要になったら、WeakMapの中のキーオブジェクトと対応するキーのペアが自動的に消えます.手動で参照を削除する必要はありません.
基本的に、対象にデータを追加したいならば、ゴミ回収の仕組みを邪魔したくないので、WeakMapを使えばいいです.典型的なアプリケーションシーンは、WebページのDOM要素にデータを追加すると、WeakMap構造を使用することができます.DOM要素がクリアされると、対応するWeakMapレコードは自動的に除去されます.
注意してください.WeakMapが弱いのはキーの名前だけで、キーの値ではありません.キーの値は依然として正常参照です.
締め括りをつけるセット メンバーは、唯一、無秩序であり、 を繰り返さない.[value,value]キーの値はキーの名前と一致しています. は巡回できます.方法はadd、delete、has です.
WeakSet メンバーは対象 です.メンバーは弱い参照です.ゴミ回収メカニズムによって回収され、DOMノードを保存するために使用できます.メモリ漏れを引き起こしにくいです. は遍歴することができなくて、方法はadd、delete、has があります.
Map は本質的にキーパッドのペアの集合であり、類似の集合 である.は、巡回することができ、多くの方法は、様々なデータフォーマットと を変換することができる.
WeakMap 受け入れる対象が一番キー名(nullを除く)で、他のタイプの値をキーとして受け入れない です.キーの名前は弱い引用で、キーの値は任意であり、キーの名前が指すオブジェクトはごみに回収されます.この時キーの名前は無効です. は遍歴することができなくて、方法はget、set、has、delete があります.
Set自体はSetデータ構造を生成するためのコンストラクタである(配列に類似しているが、メンバは一意で無秩序であり、重複した値はない).
const s = new Set()
[1, 2, 3, 4, 3, 2, 1].forEach(x => s.add(x))
for (let i of s) {
console.log(i) // 1 2 3 4
}
//Set ( iterable ) , 。
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]
const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
items.size // 5
Setの特性を利用して配列の再除去を実現した.//
[...new Set(array)]
文字列内の重複文字を取り除くためにも使用できます.[...new Set('ababbc')].join('')
// "abc"
Aray.from法はSet構造を配列に変えることができる.const items = new Set([1, 2, 3, 4, 5]);
const array = Array.from(items);
Setを使用すると、統合、インターレース、および差分セット(Difference)が容易に実現できます.let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
//
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}
//
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
//
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}
Set構造の例は以下のような属性がある.注意:Set構造のキー名はキーの値です.
2.WeakSet
ES 6は、Mapデータ構造を提供する.オブジェクトと同様に、キーパッドのペアのセットですが、Mapの「キー」の範囲は文字列に限定されず、各種の値(オブジェクトを含む)はキーとして使用できます.つまり、Object構造は「文字列ー値」の対応を提供し、Map構造は「値ー値」の対応を提供し、より完璧なHash構造の実現である.
Mapはパラメータとして配列を受け入れられます.この配列のメンバーはキーペアを示す配列です.
const map = new Map([
['name', ' '],
['title', 'Author']
]);
map.size // 2
map.has('name') // true
map.get('name') // " "
map.has('title') // true
map.get('title') // "Author"
Map構造の例には、size属性があります.インスタンスのメンバの総数を返します.const e1 = document.getElementById('foo');
const e2 = document.getElementById('bar');
const arr = [
[e1, 'foo '],
[e2, 'bar '],
];
上のコードでは、e 1とe 2は2つのオブジェクトであり、arr配列を介してこれらの2つのオブジェクトにいくつかのテキストを追加します.これは、arrのe 1とe 2への参照が形成されており、これらの2つのオブジェクトが必要とされない場合は、手動でこの参照を削除しなければならない.そうでなければ、ゴミ回収メカニズムはe 1とe 2のメモリを解放しない.// e1 e2
//
arr [0] = null;
arr [1] = null;
上のような書き方は明らかに不便です.書くのを忘れたら、メモリが漏れます.WeakMapはこの問題を解決するために誕生しました.キーの名前が引用されている対象は弱い引用です.つまりゴミ回収メカニズムはこの引用を考慮に入れません.したがって、参照されているオブジェクトの他の参照が消去されている限り、ゴミ回収メカニズムは、オブジェクトが占有しているメモリを解放します.つまり、不要になったら、WeakMapの中のキーオブジェクトと対応するキーのペアが自動的に消えます.手動で参照を削除する必要はありません.
基本的に、対象にデータを追加したいならば、ゴミ回収の仕組みを邪魔したくないので、WeakMapを使えばいいです.典型的なアプリケーションシーンは、WebページのDOM要素にデータを追加すると、WeakMap構造を使用することができます.DOM要素がクリアされると、対応するWeakMapレコードは自動的に除去されます.
注意してください.WeakMapが弱いのはキーの名前だけで、キーの値ではありません.キーの値は依然として正常参照です.
締め括りをつける