set
1.set的意义
set类似于数组 但成员的值是唯一的
2.创建set
const s = new Set();//创建一个空set
let set = new Set([1,2,3,4,4,5])//初始化
注意:
1.set内部不会发生类型转换,5和‘5’是不一样的
2.两个对象是不一样的,即使内容一样
3.set的属性
set.constructor:默认就是Set()构造函数
set.size:返回实例成员的数量
4.set的操作方法
let s=new Set()
s.add(1).add(1).add(2)//Set(2) {1, 2}
s.delete(2)//true
console.log(s)//Set(1) {1}
s.has(1)//true
s.clear()
console.log(s)//Set(0) {}
5.set的遍历方法
(1)keys():返回键名的方法
(2)values() 返回键值的方法
(3)entries() 返回键值对的遍历器
(4)forEach() 使用回调函数遍历每个成员,没有返回值
let set = new Set(["red", "green", "blue"]);
for (let item of set.keys()) {
console.log(item);
}// red green blue
for (let item of set.values()) {
console.log(item);
}// red green blue
注意:Set结构实例的默认遍历器生成函数就是 values()方法
for (let item of set) {
console.log(item);
}// red green blue
for (let item of set.entries()) {
console.log(item);
}
//['red', 'red'] ['green', 'green'] ['blue', 'blue']
set.forEach((value, key, s) => {
console.log(s.size);
console.log(value);
});
6.set的运用
(1)使用set去除数组的重复元素
let arr = [2, 3, 4, 3, 4, 1, 2];
arr = [...new Set(arr)];
console.log(arr);//[2, 3, 4, 1]
(2)结合filter和map使用
let ns = new Set([1, 2, 3, 4]);
ns = new Set([...ns].map(x => x * 2));
console.log(ns);//Set(4) {2, 4, 6, 8}
ns = new Set([...ns].filter(x => x % 3 == 0));
console.log(ns);//Set(1) {3}
(3)取并集
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
//并集
let union = [...new Set([...a], [...b])];
(4)取交集
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
//交集
let union = [...new Set([...a].filter(x=>b.has(x)));
(5)取差 a中有b中没有的
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
//差集
let union=[...new Set([...a].fliter(x=>!b.has(x)))
7.weakSet
(1)weakset和set的区别:
- weakset中的成员只能是对象
- weakset中的对象都是弱引用(弱引用不会屏蔽垃圾回收机制,当对象仅被弱引用的时候,是会被回收的)
- weakset不可遍历