コレクションと同様の配列との間の差の概念
実際には、コレクションが配列であるが、配列のインデックスが数値型である。あなたはインデックスとして非数値型を使用する場合、配列は、ニーズを満たすことができなくなります。
セットをマッピングし、複数のキーが格納されていてもよい - 値ペア(キー値)、セットの要素の複数のセットを格納することができます。
マップを設定し、一般的に、その中に要素を個々にない。典型的には、データを格納するための頻繁なアクセスを必要とする地図、セットは、典型的には、その値があるかどうかを決定するために使用されます。
地図とSetのシミュレーション方法でES 5
ES、およびマップセット5が設定されていない、オブジェクトは一般にオブジェクト(キー)のキー属性の両方のセットをシミュレートするために使用され、値(値)として属性値に、すなわちで property: property-value
シミュレート key-value
次のように形式具体。
コレクションにシミュレーションキーの地図:
// 创建一个 Map 对象
var map = Object.create(null);
// 添加属性和属性值, 即 添加 key 和 value map.key1 = 'value 1'; map.key2 = {}; // 取得 key 对应的 value console.log(map.key1); // "value 1" console.log(map.key2); // "Object {}"
アナログセット:
// 创建一个 Set 对象
var set = Object.create(null);
// 添加属性和属性值, 即 添加 key 并令其值为 true, 即表示这个key存在于集合中 set.key = true; // 判断 key 是否存在, 然后进行下一步的操作 if(set.key) { ... }
欠陥のセットを用いたシミュレーションでは二つのオブジェクト
- 渡されたが、対応する文字列型にキャストする場合は、オブジェクト名の性質上、文字列ではなく文字列でなければなりません(知識キャストがこの記事の側面見ることができますクリック)
- キーに対応する値がfalseであるかfalseにキャストすることができるとき、通常if文は、文でそのキーが存在していないが、実際には存在しますが、場合値=コレクション、中にキーがあるかどうかを判断します偽のみ。
地図とSetコレクションにES6
地図
マップは、すなわち、オブジェクトがキーとして使用することができ、キーと値は、任意のタイプとすることができるキーと値のペアの形式でキー値に格納されている。このように多くの柔軟性をシミュレートする目的より
作成と初期化の地図
- あなたは空の地図を作成するために、新しいMap()コンストラクタを使用することができます
// 创建一个空的 Map
let map = new Map();
- また、マップを作成し、初期化するアレイをマップ()コンストラクタを通過することができる。受信アレイは、各サブアレイは、2つの要素を有する二次元アレイであり、前者は、意志、キーとして使用されます値として、このように例えば、キー値のキーを形成します。
// 用数组来创建一个 非空的 Map
let array = [ // 定义一个二维数组, 数组中的每子都有两个元素
['key1' , 'value 1'], // key 是 字符串 "key1", value 是字符串 "value 1" [{} , 10086] , // key 是个对象, value 是数值 10086 [ 5, {} ] // key 是个数值类型, value 是对象 ]; let map = new Map(array); // 将数组传入 Map 构造函数中
利用可能な方法の地図
set(key, value)
:これにキーと値のペアを追加しました。get(key)
:そこの鍵を返すとundefined
has(key)
:ブール値を返します。delete(key)
:キーが偽の障害リターンを存在しないか、または削除しない場合は削除されたが正常に、trueを返しますclear()
:すべての要素をクリア
サイズ属性、キーと値のマップの数の属性値
トラバーサル方法のforEach()
コールバック関数に類似のForEachアレイと方法は3つのパラメータのキーが含まれており、コレクション自体は、このメソッド呼び出しの地図
map.forEach(function(value, key, ownerMap){
console.log(key, value); // 每对键和值 console.log(ownerMap === map); // true });
セットコレクション
設定されたマップとの最大の違いは、キーとキーの値だけではない、それは一般的要素(キー)を決定するために使用されたそれらの中に存在しています。
類似した地図作成と初期化の方法、
いずれかの非空集合の配列を初期化するために使用することができる空のセットを作成して、マップが異なることアレイが一次元アレイは、各要素は、例えば、キーのセットであろうということです..:
// 创建一个数组
let array = [1, 'str']; // 一维数组 // 用数组来初始化 set let set = new Set(array);
セット方法
add(key)
:パラメータの着信番号は、最初のものだけが、中に参加する場合は、セットに要素を追加します。
let set = new Set();
set.add(1, 2, 3); console.log(set.has(1), set.has(2), set.has(3)); // true false false 可以看到只有第一个参数被加入进了 set
has(key)
delete(key)
clear()
トラバーサル方法のforEach
マップとはforEachメソッドがコールバック関数のパラメータに似ています3(値、キー、ownerSet)である。論理的にこのセットが唯一のキー値ではないので、その値は落ちるだろうが、このパラメータ機能すべきではない、なぜこの値パラメータがまだ存在しますか?セットのとパラメータを変更した場合のforEach配列や地図のメソッドコールバック関数のパラメータは、3であるため、おそらく、それは一貫性を失うことになる。このような理由から......
まあ、何の価値、それが何であるかの値の値が存在しないため?答えは同じとキーである。我々は、値とキーを同一視することができます。次のコードは、この文を確認することができます。
set.forEach(function(value, key, ownerSet){
console.log(value === key, set === ownerSet); // true true });
WeakSet和WeakMap
二組の前に追加されているよりも、両方のセットの名前の前に Weak
、これは Weak
直接翻訳することができ弱
、弱い弱参照は、その後、弱設定されたマップのないフロントが弱いではないことを、この手段は、この強い強く、これは、強い参照を指します。
設定と地図との違い
- 私は、表面層の違いについてお話しましょう:
- コレクションのキー弱いバージョンが 唯一のオブジェクトであることができる、値の種類には制限。
- foreachの方法は、コレクションの弱いバージョンではない、にするための方法がない、また(与えられている)配列を初期化することができます。
- この方法は、より少ない使用可能WeakSet弱いバージョンである。
add, has, delete
この方法を用いることができる。WeakMap唯一のset, has, get, delete
方法が利用できます。
- 根本的な違い
、それぞれの参照先オブジェクトの強度の根本的な違いのバージョン、及びオブジェクトのバージョンの弱いおよび強いセットが指す キー 、すなわち、オブジェクトの位置、オブジェクトキーのケース。
キーメカニズムの強度バージョン次のようにオブジェクトの時間への参照です。
ターゲットは、コレクションの参照でオブジェクトを保存するために、キーに設定されている。このオブジェクトが唯一のコレクションは、オブジェクトを引用した時には他の参照を持っていない場合には弱い型付けのコレクションは、オブジェクトへの参照を放棄する時期、このオブジェクトがセットから削除され、それがコレクション内に存在し続けることはできませんでした、といくつかの「冷酷な」手段;だけでなく、厳密に型指定されたコレクションは、オブジェクトへの参照に保存されている、セットの上に置きますこれは[設定やマップ]と[WeakSetとWeakMap]根本的な違いがあるで。あります。
このメカニズムは唯一のキー、および結合関係なく、他の参照があるかどうかの位置のオブジェクトの値に影響を与え、WeakMapオブジェクトをあきらめないこと。だけオブジェクトのキーバインディング、その位置を他の参照が存在しない場合注、意志キーと値は破棄されている。決定休符をキー位置に。
コレクションの弱いバージョンの主な用途
コレクションのバージョンは、このようなDOMオブジェクトへの参照を保存するよう、必要なライフサイクル管理を使用することができた場合はDOMオブジェクトがアップに使用されている場合、他の言及はありません、それは、メモリリークを避けるために、そして弱いバージョンゴミでなければなりませんそのようなオブジェクトの保存に最適なのコレクション。
注:一連の4種類の順序付けされ、即ち、要素が配列を節約するために、それに追加され、同じ設定に初期化配列の内部にある、アレイ内の位置に応じて順次コレクションに追加されます。
オリジナルのブログのリンク:https://www.cnblogs.com/shikaka/p/10576531.html