js學習筆記(set類型&weakset)

set類型

定義及聲明方式

set類型類似數組,但set內的元素不會有重複

let set = new Set();
set.add(1);
set.add("1");
console.log(set); => [1,'1']

set類型的增刪改查

let set = new Set (['csdn','github']);
console.log(set.values()); => SetIterator{['csdn','github'}
//獲取set類型的元素
console.log(set.size); => 2
//獲取set類型的長度

console.log(set.has("csdn"));
//判斷set類型中元素是否存在

console.log(set.delete('csdn')); => true
//在set類型中查找並刪除某元素,若刪除成功返回true,若元素不存在返回false

set.clear();
//清空set類型

類型之間的轉換

數組轉爲set類型
let set = new Set(arr);

set類型轉爲數組
let arr = [...set];

set類型使用數組的方法過濾

let set = new Set('123456789');
let arr = [...set].filter(item=> item < 5);
set = new Set(arr);
console.log(set); => {1,2,3,4};

arr數組使用set去重

let arr = [1,2,3,3,4,5,3,1];
let arr = [...new Set(arr)];

遍歷set類型

let set = new Set('csdn','github');
set.forEach((value, key.set)=>{
	console.log(value)
})
//value和key一樣

for (let value of set) {
	console.log(value);
}

set類型的應用

let obj = {
	data:new Set(),
	keyword(word){
		this.data.add(word);
	},
	show() {
		let ul = document.querySelector('ul');
		ul.innerHTML = '';
		this.data.forEach(item=>{
			ul.innerHTML += `<li>${ item}</li>`
		});
	}	
}
let input = document.querySeletor('[name = csdn]');
input.addEventListener('blur',function(){
	obj.keyword(this.value);
	obj.show();
})

set類型處理並集交集與差集

let a = new Set([1,2,3,4,5]);
let b = new Set([4,5,3,8]);

console.log(new Set([...a, ...b])); => { 1,2,3,4,5,8 }
//並集

new Set( [...a].filter(item=> b.has(item) ) ); => { 3,4,5 }
//交集

new Set([...a].filter(item)=> !b.has(item)); => { 1,2 }
//差集,存在a中並不存在b中的元素

weakset

定義及聲明

定義:與set類型相似,裏面的值只能存放引用類型數據(存放基本類型數據會報錯)

let set = new WeakSet;
set.add(["NY","NN"]);

可使用weakset類型存儲dom元素

let nodes = new WeakSet();
let divs = document.querySelectorAll('div');
divs.forEach(item=>{
	nodes.add(item);
});
nodes.delete(div[0]);
console.log(nodes.has(div[0])); => false

weakset集合只能存儲對象的弱引用,並且不可以儲存原始值;
集合中的弱引用如果是對象的唯一的引用,則會被回收並釋放相應內存

weakset 集合不可跌迭代,把所以不能被遍歷,也不支持size屬性,這其實是爲了讓它能夠正確地處理內存中的數據。故,如果你只需要跟蹤對象的引用,那麼更應該使用weakset集合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章