違いと使用セット、マップ、WeakSet、WeakmapのES6詳細

セット、マップ、WeakSet、利用JSのWeakmap頻度がますます高く、特別な装置は、新たな枠組みの中で、ソースコードの一部は、このブログは、その基本的な使用法の違いとなり、メモリを強化、要約を行うことです。

セットする

セットの定義との特性

  • JSでセットは、オブジェクトの任意の型を格納することができます一意の値を、元の値またはオブジェクト参照であるかどうか、。
  • トップレベルのデータ構造は、自動的に内部配列のインデックスを追加し、キー - >値の機能を持っていません。
  • 任意のデータは、異なる種類に保存することができます。

どのように特有の性質を理解すること:参照型のため、格納された値が格納されていると同じである場合にのみ、元のデータ型について(ブール値、数値、文字列、ヌル、未定義)は「==」、すなわち、同一の参照を分析するだけのメモリに対処しますか。

   let set = new Set();  
//a,b属于object 值完全相同
    let a = {
        name:"cc",
        age:28
    };
    let b = {
        name:"cc",
        age:28
    };
   
//c,d属于number类型 值完全相同
    let c = 0,d = 0;
//e,f 属于Date类型,值相同
    let e=f = new Date();

    set.add(a);
    set.add(b);
    set.add(c);
    set.add(d);
    set.add(e);
    set.add(f);

    a= "abc";
    b = {
        name:"cc",
        age:30
    }
    set.add(a);
    set.add(b);

    console.log(set);

ここに画像を挿入説明
セット方法

  • サイズ属性:集合の要素数を返します。(配列の長さと同様の長さ)
  • 追加(値)方法:設定値に要素を追加します。注:既存のコレクションに要素を追加しますが、コレクションは、エラーなしに変更されません。
  • (値)を削除します。コレクションから要素の値を削除します。
  • 持っている(値)方法:コレクション内の値は、trueまたはfalseを返すかどうかを判断します。
  • clear()メソッド:空のセット。

セットのシナリオ

反復性は、値セットは保存されません考えると、多くの場合、再配列の交差点や労働組合、違いや他の操作をシークするために使用されます。

  1. 重複排除アレイ
let arry = [1, 2, 3, 4, 4,1,2,3,2];
var mySet = new Set(arry);
 let newArry = [...mySet]; // [1, 2, 3, 4]
  1. 労働組合、交差点、違いを求めます。
    //set求并集
    let arryA= [2,3,4,5,6],arryB = [3,4,5,6,7,8];
    let setAB = new Set([...arryA,...arryB]);
    let newArryAB = [...setAB];
    console.log(newArryAB); //[2,3,4,5,6,7,8]

    //求交集
    let arryC= [2,3,4,5,6],arryD = [3,4,5,6,7,8];
    let setC = new Set(arryC);
    let setD = new Set(arryD);
    let newArryC_D = arryA.filter(x=>setD.has(x));
    console.log(newArryC_D); //[3,4,5,6]

    //求差集
    let newArryD_C = arryA.filter(x=>!setD.has(x));
    let newArryD_D = arryB.filter(x=>!setC.has(x));
    let newArryCD = [...newArryD_C,...newArryD_D];
    console.log(newArryCD); //[2,7,8]

地図

マップ定義との特性

Mapオブジェクトは、ペアを保持しています。任意の値(または元の目標値)は、キーまたは値として使用することができます。

地図CRUD共通の属性とメソッド:

  • サイズ:属性、削除辞書の長さ
  • セット(キー、値):この方法は、辞書に新しい要素を追加します
  • 取得(キー):特定のキー値とリターン経由を見つける方法
  • (キー)を持つ:鍵方式がある場合、キーは、決定された辞書です
  • (キー)を削除:この方法は、キーによってキーに対応する辞書データから削除します
  • クリア():メソッド、この辞書、削除のすべての要素

違いのオブジェクト:

  • キーのオブジェクトは、文字列や記号することができますが、マップのキーは、任意の値にすることができます。
  • キーの地図は(FIFO原理)注文、およびオブジェクトキーに追加されているではありません。
  • マップのキー値はサイズ属性の数から得られ、そして手動でのみ数について計算キー値を対象とすることができます。
  • キー名は上書きの競合になる場合、オブジェクトは、独自のオブジェクト上のキーのセット、およびマップの健康におけるプロトタイプチェーンと可能な競合上のキー名を繰り返すことはできません、対応する値を、独自のプロトタイプを持っています。
let map = new Map();
    let s = {
        name:'cc',
        job:'programmer'
    }
    let m ={
        dd:'cdcdcd',
        do:function(str){
            console.log(str)
        }
    }
    map.set(s,m);
    map.set(m,s);
    map.set(0,s);
    map.set(0,m);
    console.log(map)

ここに画像を挿入説明
マップトラバーサル

以下のための...の
はforEach

 for(let [key,value] of map){
        console.log("key:"+JSON.stringify(key)+"-------value:"+JSON.stringify(value))
    }

  map.forEach((value,key)=>{
      console.log("key:"+JSON.stringify(key)+"-------value:"+JSON.stringify(value))
  })

アレイとの間で変換マップ

 let arryK = [[1,2],[3,4],[5,6]];

    let mapK = new Map(arryK);

    let mapP = Array.from(mapK);

    console.log(mapK);
    console.log(mapP);

ここに画像を挿入説明
地図のコピー

mapV =新しい地図(マップ)をしましょう。

WeakSet

そして、構造的に類似したセット、それが値のセットを繰り返していないが、唯一WeakSetオブジェクトのメンバーにすることができます。

APIをWeakSet:アドオン()//追加します。削除()//削除;がある場合//()を持っています

注:なしサイズプロパティをWSない、トラバースすることはできません。弱参照されているWeakSetメンバーは、任意の時点で消える可能性があるため、メンバーが不安定です。

使用のWeakSet
(1)使用DOMノードWSストアが、心配ノードが文書から削除されていない、それはメモリリークにつながる(すなわち、ノードに結合することなど、取り外したクリックイベントです)。
(2)次のコードは、保証のFooの方法の一例であり、唯一のFoo内のインスタンスで呼び出すことができます。ここでWeakSetを使用する利点は、インスタンスへの参照FOOS、それはそう、削除の場合は関係なく、FOOS、いないメモリリークの、とき、メモリの回復メカニズムには含まれません。

WeakSet

差分WeakMapのマップ:
WeakMapオブジェクト参照オブジェクトが弱い結合であり、任意の値であっても良い、キーと値のペアのセットです。

、WeakMap弱参照キーのみ、代わりのキー。キーは、まだ通常の参照です。

WeakMap、各キーが参照されるオブジェクトの彼自身の弱参照に対する参照であり、このキー参照同じオブジェクトへの他の参考文献に、オブジェクトは(対応するキーが無効になる)ごみとなり、そう、WeakMapキーは可算ではありません。

私有財産はWeakMapによって達成されます

    //weakmap

    let Person = (function() {

        let privateData = new WeakMap();

        function Person(name,age) {
            privateData.set(this,  {name:name,age:age});
        }

        Person.prototype.getName = function() {
            return privateData.get(this).name;
        };
        Person.prototype.getAge = function() {
            return privateData.get(this).age;
        };
        Person.prototype.setName = function(name) {
            let obj = privateData.get(this)
            obj.name = name;
        };
        Person.prototype.setAge = function(age) {
            let obj = privateData.get(this)
            obj.age = age;
        };

        return Person;
    }());

 let ssf = new Person("zhang",19);
    console.log(ssf.getName());
    console.log(ssf.getAge());
    ssf.setName("liu");
    ssf.setAge(90)
    console.log(ssf.getName());
    console.log(ssf.getAge());

ここに画像を挿入説明

公開された69元の記事 ウォンの賞賛6 ビュー2725

おすすめ

転載: blog.csdn.net/weixin_40073115/article/details/104014232