Set,类似数组,但成员值都是唯一的
const s = new Set([1,2,2,3,4])
console.log(s)//{1,2,3,4}
s.add('imooc');// 添加成员
console.log(s)//{1,2,3,4,'imooc'}
s.delete(2) //删除成员
console.log(s)//{1,3,4,'imooc'}
console.log(s.has(3))//true 是否含有某个值
console.log(s.size)//长度,成员个数
s.clear(); //清空
console.log(s)//{size:0}
1、遍历,key和value一样
s.forEach(item => console.log(item))
for(let item of s){
console.log(item)
}
for(let item of s.keys()){
console.log(item)
}
for(let item of s.values()){
console.log(item)
}
for(let item of s.entries()){
console.log(item)
}
2、数组去重
const arr = [1, 2, 2, 3, 3, 4];
const s = new Set(arr); //数组转为set
console.log(Array.from(s)) //1、set转为数组
console.log([...s]) //2、利用扩展运算符转为数组
3、合并去重
const arr1 = [1,2,3];
const arr2 = [2,3,5,6];
const ss = new Set([...arr1,...arr2])
console.log(ss)
console.log(Array.from(ss)) //set转为数组
console.log([...ss]) //利用扩展运算符转
4、取两个数组的交集
let result1 = arr1.filter(item => arr2.includes(item))
let s1 = new Set(arr1)
let s2 = new Set(arr2)
let result2 = new Set(arr1.filter(item => s2.has(item))) //去了重的交集
console.log(result1)
console.log(result2)
5、取数组差值
const arr1 = [1,2,3];
const arr2 = [2,3,5,6];
// 1
let arr3 = arr1.filter(item => !arr2.includes(item))
let arr4 = arr2.filter(item => !arr1.includes(item))
console.log([...arr3,...arr4])
// 2
let s1 = new Set(arr1)
let s2 = new Set(arr2)
let arr3 = arr1.filter(item => !s2.has(item))
let arr4 = arr2.filter(item => !s1.has(item))
console.log([...arr3,...arr4])
weakSet存储对象,弱引用,垃圾回收机制中,不回被计数到引用次数中
Map
- 类似对象,但属性名可以是任意数据类型
- 用法和Set一样,只是key和value不一样
- has是否包含某个属性
- 对象不可以 获取长度,map可以获取长度
- 频繁键值对的增删改,Map比对象更有性能优势
网友评论