Set
Set的基本使用
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
返回的结果是一个set集合,和数组对象都不一样,是一个新的数据集合
设置初始值的方法有两种,第一中是通过add()方法进行设置的,第二种就是初始化的时候内部设置数组
let set = new Set(["a","b","c"]); console.log(set);
注意:如果我们想要使用初始化复制的状态,赋值必须是数组,不可以是对象等等
set内部的赋值不能有重复
let set = new Set(); // 插入数据 set.add("a"); set.add("a"); set.add("a"); set.add("b"); set.add("b"); set.add("b"); set.add("c"); set.add("c"); set.add("c"); console.log(set);
也可以连续打点使用
Set的方法
插入值使用的是add方法
向Set加入值的时候,不会发生类型转换,所以1和"1"是两个不同的值。
删除值使用的是delete方法
内部想删除哪个数据就填哪个数据
let set = new Set([1,2,3,4,5]); set.delete(3) console.log(set);
检测内部是否有该值
let set = new Set([1,2,3,4,5]); console.log(set.has(3));
求集合的长度
判断长度不是length,是size
清空集合内部所有的数据
let arr = new Set([1,2,3,4,5]); arr.clear() console.log(arr);
set的循环
map和set是可以使用for..of进行遍历,是因为map和set都是iterator接口机制
let arr = new Set([1,2,3,4,5]); for(let item of arr) { console.log(item); }
可以使用keys和values进行变量来看一下set集合key和value分别是什么
let arr = new Set([1,2,3,4,5]); for(let item of arr.keys()) { console.log(item); } for(let item of arr.values()) { console.log(item); }
set集合的key和value是相同的
set也可以用forEach去遍历
let arr = new Set([1,2,3,4,5]); arr.forEach((item,index)=>{ console.log(item,index); })
set也可以使用entries方法去遍历
let arr = new Set([1,2,3,4,5]); for(let item of arr.entries()) { console.log(item); }
Set转换为数组
由于set不能使用数组的方法,虽然forEach可以用,但是仅仅是forEach方法,其他是不可以的,比如map、filter
下面的方法是错误的,因为map是数组的方法,set不能用
let arr= new Set([1,2,3,4,5]); arr= arr.map((item)=>{ return item * 2 })
如果想操作set中的数据,需要将set转换为数组
如何转换?'…'扩展运算符是有iterator接口机制,所以set就可以使用'…'运算符
set转换为数组
let arr = new Set([1,2,3,4,5]); console.log([...arr]);
可以将set的内部值统一乘以2
let arr = new Set([1,2,3,4,5]); console.log(new Set([...arr].map(item=>item*2)));
先将set通过…运算符转换为普通数组,然后再用map方法
可以利用set和数组的各自特点做去重,比如数组的去重
let arr = [1,1,1,2,2,2,3,3,3,4,4] let arr2 = [...new Set(arr)]; console.log(arr2);