ES6系列_11之Set和WeakSet數據結構

1、Set數組

1.Set是什麼?數據結構

 Set是ES6 提供的一種新的數據結構。相似於數組。函數

2.Set能解決什麼問題spa

Set和Array 的區別是Set不容許內部有重複的值,若是有隻顯示一個,至關於去重。code

3.怎麼使用Set相關東西對象

 Set 函數能夠接受一個數組(或者具備 iterable 接口的其餘數據結構)做爲參數,用來初始化。blog

(1)Set的聲明接口

let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"}

(2)Set值的增刪查內存

追加add:開發

在使用Array的時候,使用push進行追加值,那Set稍有不一樣,它使用add進行追加。

let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"}

setArr.add('4')
console.log(setArr);//Set {"1", "2", "3","4"}

刪除delete:

let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"}

setArr.delete("1")

console.log(setArr);//Set {"2", "3"}

查找has:

用has進行值的查找,返回的是true或者false。

 

let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"}


console.log(setArr.has("1"))//true console.log(setArr.has("0"))//false

刪除clear:

清空全部

let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"}

setArr.clear()

console.log(setArr)//{}

 

set的循環 for…of…循環:

let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"}

for (let item of setArr){
    console.log(item); //1,2,3
}

forEach循環:

let setArr = new Set(['1','2','3']);

setArr.forEach((value)=>console.log(value)) //1,2,3

size屬性:

size屬性能夠得到Set值的數量。

let setArr = new Set(['1','2','3']);

console.log(setArr.size)// 3

 2、WeakSet

WeakSet 結構與 Set 相似,也是不重複的值的集合。可是,它與 Set 有兩個區別。

首先,WeakSet 的成員只能是對象,而不能是其餘類型的值。

其次,WeakSet 中的對象都是弱引用,即垃圾回收機制不考慮 WeakSet 對該對象的引用,也就是說,若是其餘對象都再也不引用該對象,那麼垃圾回收機制會自動回收該對象所佔用的內存,不考慮該對象還存在於 WeakSet 之中。

所以WeakSet 適合臨時存放一組對象,以及存放跟對象綁定的信息。只要這些對象在外部消失,它在 WeakSet 裏面的引用就會自動消失。

ES6 規定 WeakSet 不可遍歷。

(1)WeakSet的聲明以及賦值

聲明只能先new一個空對象,而後在使用add方法將一個已定義的對象添加到其中。

let weakObj=new WeakSet();
let obj={a:'1',b:'2'}
weakObj.add(obj);
console.log(weakObj);

輸出結果爲:

WeakSet裏邊的值也是不容許重複的,好比:

let weakObj=new WeakSet();
let obj={a:'1',b:'2'}
 let obj1=obj
weakObj.add(obj);
weakObj.add(obj1)
console.log(weakObj);

輸出結果爲:

實際爲對象指向同一個地址,當對象不指向同一個地址,即便兩個對象裏面的值,相同也是能夠添加到WeakSet裏的。好比:

let weakObj=new WeakSet();
let obj={a:'1',b:'2'}
let obj1={a:'1',b:'2'}
weakObj.add(obj);
weakObj.add(obj1)
console.log(weakObj);

輸出的結果爲:

 總結:在實際開發中Set用的比較多,WeakSet用的並很少,可是WeakSet對傳入值必須是對象做了很好的判斷。

相關文章
相關標籤/搜索