jsシリーズ-セットとWeakSet弱引用
5289 ワード
セット Setは「.」オブジェクトと定義されていますが、キー名 は値だけあります.は、厳密なタイプの検出であり、文字列の数字が数値型の数字に等しくない、すなわち1と'1'は を待たない.と配列は異なるが、Setの値は唯一の である.
属性
size
Setオブジェクト内の値の個数は、配列length属性のようなものです.
add
単一の要素を削除し、戻り値は
要素が存在するかどうかを確認します.戻り値はbollanタイプです.
配列チャプタについて説明しましたが、変換方法は2つあります.
もう一つの用が多いのは、配列をSetに回して重複要素を取り除くことです.もちろんこれは受信した外部データに重複要素があるということです.私達自身が定義しているなら、直接Setタイプと定義できます.
WeakSetとSetは同じで、重複しない値のセットですが、Setとは2つの違いがあります. WeakSetのメンバーはオブジェクトだけです. WeakSetの対象は弱引用 である.
つまり、WeakSetにおけるオブジェクトへの参照は、ゴミ回収機構には考慮されない.つまり、他のオブジェクトがこのオブジェクトを参照していない限り、オブジェクトは回収され、WeakSetにいなくても、(この特性のため、WeakSetはオブジェクトと紐付けされた情報のセットを一時的に保存するのに適している)
3.WeakSetはsize属性がないので、遍歴できません.WeakSetにはいくつかのメンバーがいます.ゴミ回収の仕組みは運行されていますか?運行前後にメンバーの個数は違っています.ゴミ回収の仕組みはいつ運行されるかは予測できないので、ES 6の規定によるWeakSetは遍歴されてはいけません.
WeakSetの応用シーン/メリット
DOMノードを記憶するために、これらのノードがドキュメントから取り外されるとメモリリークを引き起こす心配がなく、メモリリークを避けるために使用できます.
WeakSetの文法 WeaSetは構成関数であり、 を生成することができる.
WeakSetは構成関数として機能します.受信可能な配列またはクラスの配列オブジェクトはそのパラメータとして扱います.配列の全メンバーは自動的にWeakSetオブジェクトのメンバーになります.
注:(1)配列のメンバーは、オブジェクトのみ(WeakSetのメンバーはオブジェクトのみ)(2)WeakSetのメンバーとなるのは配列のメンバーであり、配列自体ではない.
WeakSetには3つの方法があります.add、delete、has
Set
オブジェクトは値のセットであり、Set中の要素は一回しか現れない.つまりSet中の要素は唯一であり、基本タイプであれ、オブジェクト参照であれ. let set = new Set([1, 1, '1', { name: 'zhang' }, [1, 2, 3]]);
console.log(set);//Set(4) {1, "1", {…}, Array(3)}
上記の簡単な定義を通して、いくつかの問題を発見できます. 属性
size
Setオブジェクト内の値の個数は、配列length属性のようなものです.
let set = new Set([1, '1', { name: 'zhang' }, [1, 2, 3]]);
console.log(set.size);//4
方法add
Set
オブジェクトの末尾に要素を追加します.Set
オブジェクトを返します. let set = new Set(['a','b']);
console.log(set.add('c'));//Set(3) {"a", "b", "c"}
delete単一の要素を削除し、戻り値は
boolean
タイプです. let set = new Set(['a','b']);
console.log(set.delete('b'));//true
console.log(set.delete('c'));//false
clearSet
オブジェクト内のすべての要素を削除し、戻り値なし let set = new Set(['a','b']);
console.log(set.clear());//undefined
ハイ要素が存在するかどうかを確認します.戻り値はbollanタイプです.
let set = new Set(['a','b']);
console.log(set.has('b'));//true
console.log(set.has('c'));//false
巡回する let set = new Set(['a','b']);
for (const item of set) {
console.log(item);//'a' 'b'
}
for (const item of set.keys()) {
console.log(item); // 'a' 'b'
}
for (const item of set.values()) {
console.log(item); // 'a' 'b'
}
for (const item of set.entries()) {
console.log(item); // ["a", "a"] ["b", "b"]
}
行列変換配列チャプタについて説明しましたが、変換方法は2つあります.
とArray.form
です. 静的方法は、セットを行列に変換することができ、配列のいくつかの便利な方法を使用することができる. let set = new Set(['a', 'b']);
console.log(Array.from(set));//["a", "b"]
console.log([...set]); //["a", "b"]
配列に変換した後、配列のfilter方法でsetデータをフィルタリングします. // , 3
let set = new Set([1, 2, 3, 4, 5]);
set = new Set([...set].filter(item => item < 3));
console.log(set);//Set(2) {1, 2}
// set , 3
let set1 = new Set([1, 2, 3, 4, 5]);
set1.forEach(item => {
if (item >= 3) {
set1.delete(item);
}
})
//
// for (const item of set1) {
// if (item >= 3) {
// set1.delete(item);
// }
// }
console.log(set1);
配列もう一つの用が多いのは、配列をSetに回して重複要素を取り除くことです.もちろんこれは受信した外部データに重複要素があるということです.私達自身が定義しているなら、直接Setタイプと定義できます.
//
let arr = [1, 2, 3, 4, 5, 3, 1];
arr = [...new Set(arr)];
console.log(arr);//[1, 2, 3, 4, 5]
配列内の集合/交叉/差集合/補完 let arr1 = [1, 2, 3, 8, 9];
let arr2 = [2, 8, 5, 6];
// ( )
console.log(arr1.concat(arr2.filter(item => !arr1.includes(item))));//[1, 2, 3, 8, 9, 5, 6]
// ( ), [2, 8]
console.log(arr1.filter(item => arr2.includes(item)));// [2, 8]
// ( arr1 , arr2 )
console.log(arr1.filter(item => !arr2.includes(item)));// [1, 3, 9]
// ( arr1 arr2 )
console.log(arr1.filter(item => !arr2.includes(item)).concat(
arr2.filter(item => !arr1.includes(item))
))//[1, 3, 9, 5, 6]
Setの集合/交叉/差集合/補完 let set1 = new Set([1, 2, 3, 9]);
let set2 = new Set([2, 5]);
console.log(set1, set2)
//
console.log(new Set([...set1, ...set2]))//Set(5) {1, 2, 3, 9, 5}
//
console.log(new Set([...set1].filter(item => set2.has(item))))//Set(1) {2}
//
console.log(new Set([...set1].filter(item => !set2.has(item))))//Set(3) {1, 3, 9}
//
console.log(new Set([...set1].filter(item => !set2.has(item)).concat(
[...set2].filter(item => !set1.has(item))
)))//Set(4) {1, 3, 9, 5}
ウェストセットWeakSetとSetは同じで、重複しない値のセットですが、Setとは2つの違いがあります.
つまり、WeakSetにおけるオブジェクトへの参照は、ゴミ回収機構には考慮されない.つまり、他のオブジェクトがこのオブジェクトを参照していない限り、オブジェクトは回収され、WeakSetにいなくても、(この特性のため、WeakSetはオブジェクトと紐付けされた情報のセットを一時的に保存するのに適している)
3.WeakSetはsize属性がないので、遍歴できません.WeakSetにはいくつかのメンバーがいます.ゴミ回収の仕組みは運行されていますか?運行前後にメンバーの個数は違っています.ゴミ回収の仕組みはいつ運行されるかは予測できないので、ES 6の規定によるWeakSetは遍歴されてはいけません.
WeakSetの応用シーン/メリット
DOMノードを記憶するために、これらのノードがドキュメントから取り外されるとメモリリークを引き起こす心配がなく、メモリリークを避けるために使用できます.
WeakSetの文法
new WeakSet()
によって一例WeakSetは構成関数として機能します.受信可能な配列またはクラスの配列オブジェクトはそのパラメータとして扱います.配列の全メンバーは自動的にWeakSetオブジェクトのメンバーになります.
注:(1)配列のメンバーは、オブジェクトのみ(WeakSetのメンバーはオブジェクトのみ)(2)WeakSetのメンバーとなるのは配列のメンバーであり、配列自体ではない.
WeakSetには3つの方法があります.add、delete、has
WeakSet.prototype.add(value)
はWeakSetのインスタンスにメンバーWeakSet.prototype.delete(value)
を追加し、WeakSetのインスタンスをクリアする指定メンバーWeakSet.prototype.has(value)
は、WeakSetのインスタンスに値があるかどうかを判断し、ブール値に戻ります.