セット、Map、WeakSet、WeakMap

4639 ワード

1.セット
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.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はパラメータとして配列を受け入れられます.この配列のメンバーはキーペアを示す配列です.
    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属性があります.インスタンスのメンバの総数を返します.
  • 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の設計目的は、あるオブジェクトの上にいくつかのデータを格納したい場合がありますが、これはこのオブジェクトに対する参照
  • を形成します.
    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が弱いのはキーの名前だけで、キーの値ではありません.キーの値は依然として正常参照です.
    締め括りをつける
  • セット
  • メンバーは、唯一、無秩序であり、
  • を繰り返さない.
  • [value,value]キーの値はキーの名前と一致しています.
  • は巡回できます.方法はadd、delete、has
  • です.
  • WeakSet
  • メンバーは対象
  • です.
  • メンバーは弱い参照です.ゴミ回収メカニズムによって回収され、DOMノードを保存するために使用できます.メモリ漏れを引き起こしにくいです.
  • は遍歴することができなくて、方法はadd、delete、has
  • があります.
  • Map
  • は本質的にキーパッドのペアの集合であり、類似の集合
  • である.
  • は、巡回することができ、多くの方法は、様々なデータフォーマットと
  • を変換することができる.
  • WeakMap
  • 受け入れる対象が一番キー名(nullを除く)で、他のタイプの値をキーとして受け入れない
  • です.
  • キーの名前は弱い引用で、キーの値は任意であり、キーの名前が指すオブジェクトはごみに回収されます.この時キーの名前は無効です.
  • は遍歴することができなくて、方法はget、set、has、delete
  • があります.