記事のディレクトリ
コレクションとは何ですか?
データ構造の見直しの前に:スタック、キュー、リンクリスト-彼らは達成するためのJSの配列を使用して、ターゲット・キーと比較して、オブジェクトの集合への依存度を達成することができます:コレクションの構造、キーと値の値は、実際には同じですその
{1:1,2:2,'a':'a'}
この種類。ES6のための参照設定データ構造
- 特長:
- いいえ繰り返しません:各要素が相互に排他的です
- 障害:コレクション、貴重によって各位置が同じで、要素間乱れています。
- コレクションで表現JS:オブジェクト
操作セットの方法
- あるかどうか:持っている(値)
- 削除:削除(値)
- (値)を追加:追加
- インデックス:のindexOf()
- クリア:クリア()
- 全長サイズ:サイズ
function SetClass(){
var items= {}
this.has = function(val){
return items.hasOwnProperty(val)
}
this.add = function(val){
if(!this.has(val)){
items[val]=val; // 以值 为key
return val
}
return false
}
this.remove = function (value){
if(!this.has(value)){
delete items[value]
return true;
}
return false;
}
this.clear=function(){
items = {}
}
this.size = function(){
return Object.keys(items).length;
}
this.values = function(){
var values = []
for(let key in items){
if(items.hasOwnProperty(items[i])){
values.push(items[i])
}
}
return values
}
this.print = function(){
console.log(items)
}
}
コレクション間の操作
- 組合:組合
- 交差点:交差点
- 差集:違い
組合
this.union = function (otherSet){
var resSet = new SetClass()
var arr = this.values()
for(let i=0;i<arr.length;i++){
resSet.add(arr[i])
}
arr = otherSet.values()
for(let i=0;i<arr.length;i++){
resSet.add(arr[i])
}
return resSet
}
交差点
this.intersection = function(otherSet){
var resSet = new SetClass()
var arr = this.values()
for(let i=0;i<arr.length;i++){
if(!otherSet.has(arr[i])){
resSet.add(arr[i])
}
}
return resSet
}
差分セット
this.differenct = function(otherSet){
var resSet = new SetClass()
let values = this.values()
for(let i=0;i<values.length;i++){
if(!otherSet.has(values[i])){
resSet.add(values[i])
}
}
return resSet
}
ES6は、新しいデータ構造を構築しました
- セット:コレクション
- WeakSet:弱いコレクションは、オブジェクト型の要素として値を追加することができます
関連APIオペレーション
var set = new Set(([1,2,3]))
set.forEach((key,value,set)=>{
console.log('key---',key)
console.log('value---',value)
console.log(set)
})
var weakSet = new WeakSet()
weakSet.add('1') //报错
weakSet.add({name:'a'})
ES6は交差点、労働組合、違いを実感します
var set1 = new Set(([1,2,3]))
var set2 =new Set([2,3,4])
// 交集
var intersect = new Set([...set1].filter(item=>set2.has(item)))
// 差集
var different = new Set([...set2].filter(item=>!set1.has(item)))
// 并集
var union = new Set([...set1,...set2])
違いを設定し、WeakSet
- 強い参照を設定し、弱参照をWeakSet
上記、オブジェクトobjに可変ポインティングを宣言は
{name:''ceshi}
、オブジェクトがGCに回収されないので、OBJは、元のオブジェクトの元のセット強い基準点の構造ので、この時点で、OBJヌル点を変更するために、設定された構成に追加されます間接参照にした後、オブジェクトを削除set.delete使用するまでメモリに残ります。weakSetがOBJ指し後に変更され、元のオブジェクトを直接GCを再循環さweakset弱参照を無視します
- シナリオ:開発、使用することは、より自動化のいくつかのメモリのより柔軟な管理をweakSet。
A ES6フェイス質問
のセット、地図、WeakSetとWeakMapを区別するために導入?
- セットする:
- メンバーは繰り返すことはできません
- 唯一のキー、キーなしの名前
- あなたは、メソッドの追加、削除トラバース、持っていることができます
- WeakSet:
- メンバーが対象となります
- メンバーは、弱参照されている任意の時点で消えることができ、DOMノードを保存するために使用することができ、それはメモリリークが発生する可能性は低いです
- 地図:
- それは本質的にセットに似たキーと値のペアのコレクションです。これは非文字列.Objectキー名、キーと値のペア「キー」であってもよいが、実際に文字列であり、かつ価値の主要地図他のタイプかもしれません。
- あなたは、横断できます
- WeakMap:
- 唯一のキーとして他の種類の値を受け入れない、(ヌル以外)キーなどのオブジェクトを受け入れます
- オブジェクトへのキーポイントは、ガベージコレクションに含まれていません
- トラバース、方法は、セットを取得することはできません、削除しました