2-3 数据结构Set()

26 阅读1分钟

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当中的对象都是弱引用,在垃圾回收机制中是不考虑弱引用类型的回收机制的