set 是ES6 里面的一种新的数据结构
set 里面的值一定是唯一的,不可以重复
let s = new Set(\[1, 2, 3, 2])
console.log(s) // 1, 2, 3
// 添加数据
s.add('ccc').add('aaa')
console.log(s) // 1, 2, 3, 'aaa', 'ccc'
// 删除指定数据
s.delete(2) // 1, 3, 'aaa', 'ccc'
// 清空数据
s.clear() //
// has() 判断当前set中是否包含某个数据
conosle.log(s.has('aaa')) // true
// size() 取到当前 set 这个数据的大小
console.log(s.size) // 4
遍历方式
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\[0], item\[1])
}
应用场景
// 数组去重
let arr = \[1, 2, 3, 4, 2, 3]
let s = new Set(arr)
console.log(s) // 1, 2, 3, 4 打印出来数组完成去重以后的结果
// 合并去重
let arr1 = \[1, 2, 3, 4]
let arr2 = \[2, 3, 4, 5]
let s = new Set(\[...arr1, ...arr2])
console.log(s)
console.log(\[...s])
console.log(Array.from(s))
// 交集
let s1 = new Set(arr1)
let s2 = new Set(arr2)
let result = new Set(arr1.filter(item => s2.has(item)))
console.log(Array.form(result)) // 2, 3, 4
// 差集
let arr3 = new Set(srr1,filter(item => !s1.has(item)))
let arr4 = new Set(srr1,filter(item => !s2.has(item)))
console.log(arr3)
console.log(arr4)
console.log(\[...arr3, ...arr4])
WeakSet
WeakSet里面只能够存储对象
let ws = new WeakSet()
ws.add({
name: 'UU'
})
ws.add({
age: 4
})
ws.delete({name: 'UU'}) // 删除不掉
console.log(ws)
// --------------------------------
const obj1 = {
name: 'UU'
}
const obj2 = {
age: 4
}
ws.add(obj1)
ws.add(obj2)
ws.delete(obj1)
console.log(ws) // 可以被删除掉
console.log(ws.has(obj2))
ws.forEach(item => console.log(item)) // 报错
- WeakSet不可以遍历,WeakSet当中的对象都是弱引用,在垃圾回收机制中是不考虑弱引用类型的回收机制的