一、ECMAScript-新的数据结构Set
1. 一种新的数据结构
结构类似于数组,但是成员的值都是唯一的,没有重复的值。
let s = new Set([1, 2, 3, 2])
console.log(s) // Set(3) {1, 2, 3}
2. 常用方法
// add
let s = new Set([1, 2, 3])
s.add('test')
console.log(s) // Set(4) {1, 2, 3, "test"}
// delete
s.delete('test')
// 清空
s.clear()
// has 是否包含某一个数值
s.has('test')
// 大小
s.size
3. 遍历
// 方式一
s.forEach( item => {
console.log(item)
})
// 方式二
for of
4. 应用场景
// 1. 数组去重
let arr = [1, 2, 3, 4, 5, 1, 6]
let s = new Set(arr)
console.log(s)
// 合并去重
let arr1 = [1, 2, 3, 4]
let arr2 = [2, 3, 4, 5, 6]
let s = new Set([...arr1, ...arr2])
console.log(s)
console.log(...s) // 输出一个数组
console.log(Array.form(s)) // 也是一个数组
// 交集 set --> array
let arr1 = [1, 2, 3, 4]
let arr2 = [2, 3, 4, 5, 6]
let s1 = new Set(arr1)
let s2 = new Set(arr2)
let result = new Set(arr1.filter( item => s2.has(item)))
console.log(Array.from(result))
// 差集
let arr1 = [1, 2, 3, 4]
let arr2 = [2, 3, 4, 5, 6]
let s1 = new Set(arr1)
let s2 = new Set(arr2)
let result1 = new Set(arr1.filter( item => !s2.has(item)))
let result2 = new Set(arr2.filter( item => !s1.has(item)))
console.log([...result1, ...result2])
5. WeakSet
// WeakSet只是一个弱引用
// 与set之间的差别
// WeakSet里面只能添加对象
// WeakSet不可以遍历
// 应用场景:临时存储
let ws = new WeakSet()
// 添加一个对象
ws.add({
name: 'zhangsan'
})
// 删除一个对象
// 这种方式是无法删除一个对象的
ws.delete({
name: 'zhangsan'
})
// 这种可以
let obj1 = {name: 'zhangsan'}
ws.add(obj1)
ws.delete(obj1)
console.log(ws)