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集合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值