セットとWeakSet

13953 ワード

データ構造SetとWeakSet
定義:SetはES 6が提供する新しいデータ構造である.配列に似ていますが、メンバーの値は全部唯一で、重複した値はありません.
セット
属性
  • Set.prototype.com nstructor:コンストラクタは、デフォルトはSet関数です.
  • Set.prototype.size:Setのインスタンスのメンバー総数を返します.
  • let set = new Set()
    console.dir(set.constructor); //ƒ Set()
            
    console.log(set.size); // 0
    set.add(1)
    console.log(set.size); // 1
    set.add(1)
    console.log(set.size); // 1            ,      1
    
    方法
  • Set.prototype.add:値を追加して、Set構造自体に戻ります.
  • Set.prototype.delete:ある値を削除し、ブール値を返します.削除が成功したかどうかを表します.
  • Set.prototype.has:この値がSetのメンバーかどうかを示すブール値を返します.
  • Set.prototype.clear():全メンバーをクリアし、戻り値がない.
  • let set = new Set()
    set.add(1).add(2).add(3).add(2) //    Set    ,             
    console.log(set); //Set(3) {1, 2, 3}
    
    set.delete(1) //            true
    set.delete(5) //             false
    
    set.has(1) //        true
    set.has(5) //        false
    
    set.clear()
    console.log(set); //Set(0) {}
    
    巡回する
  • Set.prototype.keys():キーの名前を返すエルゴード
  • Set.prototype.values():戻るキーのエルゴード
  • Set.prototype.entries():キーペアを返すエルゴード
  • Set.prototype.forEach():各メンバ
  • を巡回するためのコールバック関数を使用する.
    let set = new Set()
    set.add(1).add(2).add(3)
    
    //1. Set       , for of              
    //              values  (           )
    for (let i of set) {
         
        console.log(i)
    }
    //1 2 3
    
    //2.keys         
    for (let key of set.keys()) {
         
        console.log(key)
    }
    //1 2 3
    
    //3.values         ,      Set            ,  keys   values         
    for (let value of set.values()) {
         
        console.log(value)
    }
    //1 2 3
    
    //4.entries           
    for (let item of set.entries()) {
         
        console.log(item);
    }
    //[1, 1] [2, 2], [3, 3]
    
    //5.forEach              
    set.forEach((key, value) => {
         
        console.log(key + value);
    })
    // 2, 4, 6
    
    使用シーン
  • 配列は重さに行きます.
    let arr = [1, 3, 4, 3, 2, 5, 4, 1]
    
    //Set          (     iterable          )    ,     。
    //       
    arr = [...new Set(arr)] //[1, 3, 4, 2, 5]
    
    //Array.from                    
    arr = Array.from(new Set(arr))
    
    ウェストセット
    WeakSetの使い方はSetと大同小異ですが、以下の点に注意が必要です.
  • WeakSetはオブジェクトのみを格納することができます.
  • WeakSetはclear()の方法がありません.
  • WeakSetはsize属性がなく、メンバーを巡回する方法がない.
  • const ws = new WeakSet();
    //            ,    
    ws.add(1)
    // TypeError: Invalid value used in weak set
    ws.add(Symbol())
    // TypeError: invalid value used in weak set
    
    次に、WeakSetの対象は弱い参照である.つまり、ゴミ回収メカニズムはWeakSetの対象に対する参照を考慮しない.つまり、他の対象がその対象を引用しない場合、ゴミ回収メカニズムは自動的に対象が占有しているメモリを回収し、対象がまだWeakSetに存在することを考慮しない.
    この特徴のため、WeakSetのメンバーはいつでも消えてしまうので、引用には適していません.また、WeakSetの内部にはどれぐらいのメンバーがいますか?ゴミ回収の仕組みが運行されているかによって、運行前後はメンバー数が違っているかもしれません.ゴミ回収の仕組みがいつ運行されるかは予測できないので、ES 6はWeakSetを遍歴してはいけないと規定しています.クリックしてごみの回収の構造を理解します.