セットとWeakSet
13953 ワード
データ構造SetとWeakSet
定義:SetはES 6が提供する新しいデータ構造である.配列に似ていますが、メンバーの値は全部唯一で、重複した値はありません.
セット
属性 Set.prototype.com nstructor:コンストラクタは、デフォルトはSet関数です. Set.prototype.size:Setのインスタンスのメンバー総数を返します. Set.prototype.add:値を追加して、Set構造自体に戻ります. Set.prototype.delete:ある値を削除し、ブール値を返します.削除が成功したかどうかを表します. Set.prototype.has:この値がSetのメンバーかどうかを示すブール値を返します. Set.prototype.clear():全メンバーをクリアし、戻り値がない. Set.prototype.keys():キーの名前を返すエルゴード Set.prototype.values():戻るキーのエルゴード Set.prototype.entries():キーペアを返すエルゴード Set.prototype.forEach():各メンバ を巡回するためのコールバック関数を使用する.配列は重さに行きます.
WeakSetの使い方はSetと大同小異ですが、以下の点に注意が必要です. WeakSetはオブジェクトのみを格納することができます. WeakSetはclear()の方法がありません. WeakSetはsize属性がなく、メンバーを巡回する方法がない.
この特徴のため、WeakSetのメンバーはいつでも消えてしまうので、引用には適していません.また、WeakSetの内部にはどれぐらいのメンバーがいますか?ゴミ回収の仕組みが運行されているかによって、運行前後はメンバー数が違っているかもしれません.ゴミ回収の仕組みがいつ運行されるかは予測できないので、ES 6はWeakSetを遍歴してはいけないと規定しています.クリックしてごみの回収の構造を理解します.
定義:SetはES 6が提供する新しいデータ構造である.配列に似ていますが、メンバーの値は全部唯一で、重複した値はありません.
セット
属性
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
方法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) {}
巡回する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と大同小異ですが、以下の点に注意が必要です.
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を遍歴してはいけないと規定しています.クリックしてごみの回収の構造を理解します.