ES 6のSetとMapのデータ構造を簡単に使います.


セット
基本的な使い方
ES 6は、新しいデータ構造Setを提供する.配列に似ていますが、メンバーの値は全部唯一で重複していません.Set自体はSetデータ構造を生成するためのコンストラクターである.
const s = new Set();

[2, 3, 5, 4, 5, 2, 2].forEach( x => s.add(x));

s  //[2, 3, 5, 4]

const set = [1, 2, 3, 4, 4];

[...set]   // [1, 2, 3, 4]

set.size  // 4
Setに値を加えるとタイプ変換が発生しないので、5と'5'は2つの異なる値であり、正確な等しい演算子(==)に似ていますが、SetのNaNとNaNは等しいという異例があります.
Setのインスタンスの属性と方法
属性:1.Set.prototype.com nstructor:コンストラクタ、デフォルトはSet関数です.2.Set.prototype.size:Setインスタンスのメンバー総数を返します.
方法:操作方法とエルゴード方法に分けて、まず4つの基本的な操作方法を紹介します.
add(value):値を追加し、Set構造自体に戻ります.
delete(value):ある値を削除し、ブール値を返します.削除が成功したかどうかを表します.
has(value):パラメータがセットメンバーかどうかを示すブール値を返します.
clear(value):全メンバーをクリアし、戻り値がない.
巡回操作:
keys():キーの名前を返すエルゴード
Values():キーの値に戻る
Enttries():キーペアのエルゴードを返す
forEach():コールバック関数を使ってメンバーを巡回します.
巡回したアプリケーション
拡張演算子とSet構造を結合して、配列を除去する重複要素
let arr = [ 3, 5, 2, 2, 5, 5];

let unique = [... new Set(arr)];    // [3, 5, 2]
集合、集合、集合、集合、集合、および差分を達成します.
let a = new Set([ 1, 2, 3 ]);

let b = new Set([ 4, 3, 2 ]);

//  

let intersect = new Set([ ...a ].filter( x => b.has(x)));  //Set{2, 3}

//  

let union = new Set([ ...a ],[ ...b ]);   //Set{1, 2, 3, 4}

//  

let difference = new Set([ ...a ].filter( x => !b.has(x))); //Set{1}
ウェストセット
WeakSet構造はSetと同様であり、重複しない集合でもある.しかし、Setとは2つの違いがあります.
  • WeakSetのメンバーはオブジェクトのみであり、他のタイプの値
  • ではない.
  • WeakSetのオブジェクトは弱い参照であり、つまりゴミ回収メカニズムはWeakSetがオブジェクトに対する参照を考慮しない、つまり、他のオブジェクトがそのオブジェクトを参照していない場合、ゴミ回収メカニズムは自動的にオブジェクトが占有しているメモリを回収し、対象がまだWeakSetに存在するかどうかを考慮しない.
  • WeakSetはsize属性がないので、メンバーを遍歴することができません.
    Map
    意味と基本的な使い方
    オブジェクトに似ていて、キーパッドのペアの集合でもありますが、キーの範囲は文字列に限られず、各種の値(オブジェクトを含む)はキーとして使用できます.つまりObject構造は「文字列−値」の対応を提供し、Map構造は「値−値」の対応を提供する.
    同じキーに値を割り当てると、後の値が前の値を上書きします.
    Mapのキーは実際にメモリアドレスと紐付けされています.メモリアドレスが異なる限り、2つのキーとして扱われます.次の例のように:
    const map = new Map();
    
    const k1 = [ ‘a’ ];
    
    const k2 = [ ‘a’ ];
    
    map.set(k1, 111).set(k2, 222);
    
    map.get( k1 )   // 111
    
    map.get( k2 )   // 222
    実例の属性と操作方法
    size属性
    Map構造のメンバー数を返します.
    set(key,value)
    キーの対応するキーの値を設定し、Map全体の構造に戻ります.
    ゲット(key)
    key対応のキーを読み、keyが見つからない場合はundefinedに戻ります.
    has(key)
    ブール値を返します.どのキーがMapデータ構造にあるかを表します.
    delete(key)
    あるキーを削除して、trueに戻ります.削除に失敗したらfalseを返します.
    clear()
    clearメソッドは、すべてのメンバーをクリアし、値を返しませんでした.
    巡回方法
    keys():キーの名前を返すエルゴード
    Values():キーの値に戻る
    Enttries():キーペアのエルゴードを返す
    forEach():Mapの全メンバーを巡回しました.
    Map構造から配列構造への比較的速い方法は拡張演算子(…)を結合することである.
    他のデータ構造との相互変換
    Mapを行列に変換
    const myMap = new Map()
    
        .set( true, 7)
    
        .set({ foo: 3}, [‘abc’]);
    
    [...myMap ]    // [ [ true, 7], [ { foo: 3 }, [ ‘abc’ ] ] ]
    配列をMapに変換
    new Map([
    
        [ ture, 7 ],
    
        [ {foo: 3}, [‘abc’] ]
    
    ])
    Mapをオブジェクトに変換
    function strMapToObj(strMap) {
    
        let obj = Object.create(null);
    
        for(let [k, v] of strMap) {
    
            obj[k] = v;
    
        }
        return obj;
    
    }
    オブジェクトをMapに変換
    function ObjTostrMap(obj ) {
    
        let strMap= new Map();
    
        for(let k of Object.keys(obj)) {
    
            strMap.set( k, obj[k] );
    
        }
    
        return strMap;
    
    }
    MapがJSONに変わります
    function strMapToJson(strMap) {
    
        return JSON.stringify(strMapToObj(strMap));
    
    }
    JSONがMapに変わります
    function JsonTostrMap(JsonStr) {
    
        return objToStrMap(JSON.parse(jsonStr));
    
    }
    WeakMap
    WeakMapはMapと同様の構造であり、キーペアのセットを生成するためにも用いられる.
    WeakMapとMapの違いは2つあります.
  • WeakMapは、対象をキー名(nullを除く)として受け取り、他のタイプの値をキー名として受け入れることはできません.
  • WeakMapのキーが指すオブジェクトはごみ回収メカニズムに含まれません.