Set是ES6给开发者带来的一种新的数据结构,你可以理解为值的集合。我们平时见到的数组Array也是一种数据结构,但是Set跟其他数据结构不同的地方就在于:它的值不会有重复项
Set的基本用法
1 | var s = new Set(); |
Set本身是一个构造函数,你可以理解为一个类,使用的时候需要用new来创建一个实例。以上的案例就是这样创建出一个Set结构
add() 给Set集合添加元素
1 | var s = new Set(); |
delete( )方法
- delete( )方法:用户删除Set结构中的指定值,删除成功返回:true,删除失败返回:fasle
1
2
3
4
5
6
7
8
9
10
11//用数组作为参数初始化
var s = new Set([1,2,3]);
console.log(s);
//打印结果:Set {1, 2, 3}
//使用delete方法删除指定值
s.delete(2);//结果:true
s.delete(4);//结果:false
console.log(s);
//打印结果:Set {1, 3}clear( )方法
- clear( )方法:清除所有成员
1
2
3
4
5
6//用数组作为参数初始化
var s = new Set([1,2,3]);
s.clear();
console.log(s);
//打印结果:Set {}has( )方法
- has( )方法:判断set结构中是否含有指定的值。如果有,返回true;如果没有,返回fasle
1
2
3var s = new Set([1,2,3]);
s.has(1);//结果:true
s.has(4);//结果:falsesize属性获取Set的长度
1
2
3let s = new Set([1,2,3,4]);
s.size;
//结果:4成员值唯一
- 为Set 结构添加成员值的时候,要注意一点是,set结构的成员值是没有重复的,每个值都是唯一的
1
2
3
4
5var s = new Set();
s.add(1);
s.add(1);
console.log(s);
//打印结果: Set {1}注意 Set()转化元素的时候不会做数据类型的转换 所以要注意数据类型是否一致
1
2
3
4
5
6let s = new Set();
s.add(5)
s.add(6)
s.add('5')
s.add('5')
console.log(s) //Set {5, 6, "5"} - 注意数据类型一致就可以
Set元素的遍历 读取数据
1
2
3
4
5
6
7
8
9
10
11
12
13let arr = ['add','delect','clear','has']
var list = new Set(arr)
for(let key of list.keys()){
console.log('keys',key)
}
for(let key of list.values()){
console.log('values',key)
}
for(let [key,value] of list.entries()){
console.log(key,value)
}
//打印结果 keys和values的值相同
// add delect clear hasSet的用法之一 数组去重
1
2
3
4
5
6
7
8//目标数组arr,要求去重
let arr = [1,2,2,3,4,4,4];
let s = new Set(arr);
//结果:Set {1,2,3,4}
//用数组新增加的方法在转换成数组
let newArr = Array.from(s);
//结果:[1,2,3,4],完成去重WeakSet结构
- Set和WeakSet两者名字就很像,注定它们有很多一样的地方。
WeakSet结构同样不会存储重复的值,不同的是,它的成员必须是对象类型的值
1
2let ws = new WeakSet([{"age":18}]);
//结果:WeakSet {Object {age: 18}} - 我们初始化一个WeakSet对象,参数一个数组,数组的成员必须是对象类型的值{“age”:18},否则就会报错。
1
2let ws = new WeakSet([1,2]);
//结果:报错跟Set的区别
- 支持的数据类型不一样 他不会检测这个对象在别的地方用过没 不会跟垃圾回收机制挂勾上
- 没有clear方法
- 没有size属性
- 不能遍历也就没有了keys、values、entries、forEach这4个方法