Set数据集合
一、Set数据集合
1.ES6之前只有数组一种数据结构,现在提供Set和Map两种集合
2.Set集合是一种无重复元素的列表,使用new Set()方法创建Set集合
// 创建一个Set集合 let set=new Set(); set.add(1); set.add(2); set.add(2); set.add('2'); set.add('c'); console.log(set); //Set(4) { 1, 2, '2', 'c' } console.log(set.size); //4
ps:向集合添加五个元素,只有四个有效,并且2和字符串 ‘2’ 不冲突,空对象也不冲突
3.我们也可以通过构造函数传递参数的方式进行初始化集合,比如接受一个数组
// 通过构造参数初始化集合 let set =new Set([1,2,2,3,3,4,5]); console.log(set); //Set(5) { 1, 2, 3, 4, 5 }
4.使用has()方法查找是否存在指定元素,注意2和 ‘2’ 是两个元素,不会隐形转换‘’
console.log(set.has(2)); //true console.log(set.has('2')); //false
5.使用delete()删除指定元素、clear()清除元素
set.delete(2); //删除元素 console.log(set); //Set(4) { 1, 3, 4, 5 } set.clear(); //清空 console.log(set); //Set(0) {}
6.我们可以使用 . . . 语法,将Set集合转换为数组
// 将set集合转换成数组 let array=[...set]; console.log(array); //[ 1, 2, 3, 4, 5 ]
7.我们可以使用for或者forEach来遍历Set集合
// for...of遍历 for(let i of set){ console.log(i); } //forEach变量 //在Set集合中key和value都是值 // s表示set集合本身 set.forEach(function(key,value,s){ console.log(key+'-'+value); console.log(s); })
8.Set集合还提供针对对象的Weak Set集合,添加非对象集合类型会报错
9.Weak Set 集合支持add() 、has() 和delete()方法
10.Weak Set 不支持遍历,内部隐藏(无法查看内容),不支持foreach和size
11.对应用场景来说,存放对象的弱引用,不用担心对象被回收后引发的问题
// 强引用 let set =new Set(), obj={1:1}; set.add(obj); console.log(set);//引用存在 // 移出引用 obj=null; console.log(set); //引用依然存在 // 弱引用 let ws=new WeakSet(), obj={1:1}; ws.add(obj); ws.add(global); console.log(ws.has(global)); console.log(ws.has(obj)); //true 引用存在 // 移出引用 obj=null; console.log(ws.has(obj)); //false 随着销毁而释放