一,Set
1,构造器
const arr = new Set(); //得一个空的集合const arr = new Set(数组); //把数组转成一个集合
let si=new Set([1,2,3]) //{1,2,3}2,遍历
for of 循环,是针对迭代器进行的一种循环
3,add添加
lets1=new Set();
s1.add(1);
//{1}4,delete删除
s1.delete(1)5,数组去重
由于set本身的特点,它保存的数据不能有重复的(重复的数据是无效的)
let arr=[1,2,3,NaN,NaN,1,2,4];
let arr1=[...(new Set(arr))];
//[1,2,3,NaN,4]New Set(arr)是去重,转成数组
二,Map
它类似于对象,也是键值对的集合。区别在于:
对象的属性名(键名)只能是字符串。
但map的键范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。键可以是任意类型的;
1,创建map
let m = new Map();
给初值:
let m = new Map([
["a","b"],
[1,"c"]
])
//{"a"=>"b",1=>"c"}2,添加set
let m = new Map([
["a","b"],
[1,"c"]
])
m.set(false,"abc");let a=[1,2,3]m.set(a,{"name":"jake"})
3,获取get
let m = new Map([
["a","b"],
[1,"c"]
])
m.set(false,"abc");
let a=[1,2,3]
m.set(a,{"name":"jake"})
m.get([1,2,3])获取不到值的。
原因是:get()时要比较栈区中的地址,而不是堆区中的数据。
4,重复的键盘会覆盖
三,利用set求 并集,交集,差集
let s01 = [1,2,3,1,2,6];
let s02 = [3,4,5,1,2];
// 集合 并集 交集 差集
function union(){
let s1 = new Set(s01);
let s2 = new Set(s02);
console.log([...new Set([...s1,...s2])])
}
union();
function intersection(){
// 返回true表示留下
return [...new Set(s01)].filter(function(item){
return new Set(s02).has(item);
})
}
console.log(intersection());
function diff(){
// 返回true表示留下
return [...new Set(s01)].filter(function(item){
return !new Set(s02).has(item);
});
}
console.log(diff());