Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
ES系列文章
Set 基本语法
Set类似数组,但是数组内元素会重复。Set中的值是唯一的,不会有重复的值,这就是Set的特点。定义一个Set实例:
let q = new Set()
let s=new Set([1,2,3,2])
console.log(s.add('hello'))
//Set(4) {1, 2, 3, "hello"}
s.add('es').add('js')
console.log(s.delete('hello'))
//true
console.log(s.clear())
//undefined
console.log(s.has('es')
//false
console.log(s)
//Set(0) {}
console.log(s.size)
//0
set方法 | 作用 |
---|---|
add() | 向集合添加方法,返回添加之后的新集合 |
delete() | 删除集合某元素,返回boolean值 |
clear() | 清空集合,无返回值 |
size | 返回集合的长度 |
has() | 返回boolean值,判断集合是否包含某元素 |
- 数组去重
let arr=[1,2,3,4,5,2,2,3]
let s=new Set(arr)
console.log(s)
//Set(5) {1, 2, 3, 4, 5}
- 合并去重
let arr1=[1,2,3,4]
let arr2=[2,3,4,5,6]
let s=new Set([...arr1,...arr2])
//ES6解构赋值
console.log(s)
//Set(6) {1, 2, 3, 4, 5, 6}
console.log([...s])
//(6) [1, 2, 3, 4, 5, 6]
console.log(Array.from(s))
- 交集
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)))//set不支持filter方法
console.log(Array.from(result))
//(3) [2, 3, 4]
- 差集
let arr1=[1,2,3,4]
let arr2=[2,3,4,5,6]
let arr3=new Set(arr1.filter(item=>!s2.has(item)))
let arr4=new Set(arr2.filter(item=>!s1.has(item)))
console.log(arr3)
//Set(1) {1}
console.log(arr4)
//Set(2) {5, 6}
console.log([...arr3,arr4])
//(2) [1, Set(2)]
Set 遍历方式
set的遍历方式和数组的遍历方式基本一样
- forEach():使用回调函数遍历每个成员
- for…of:可以直接遍历每个成员
- keys():返回键名的遍历器
- values():返回键值的遍历器
- entries():返回键值对的遍历器
let s=new Set(["hello","goodbye"])
console.log(s.keys()) // SetIterator {"hello", "goodbye"}
console.log(s.values()) // SetIterator {"hello", "goodbye"}
console.log(s.entries()) // SetIterator {"hello" => "hello", "goodbye" => "goodbye"}
// forEach()
s.forEach(item => {
console.log(item) // hello // goodbye
})
//for…of
for (let item of s) {
console.log(item)
// hello // goodbye
}
//keys
for (let item of s.keys()) {
console.log(item)
// hello // goodbye
}
//values
for (let item of s.values()) {
console.log(item)
// hello // goodbye
}
//entries
for (let item of s.entries()) {
console.log(item[0], item[1])
// hello hello// goodbye goodbye
}
WeakSet
WeakSet 只能存储对象,而不能是其他类型的值。
let ws = new WeakSet()
const obj1 = {
name: 'imooc'
}
const obj2 = {
age: 5
}
ws.add(obj1)
ws.add(obj2)
ws.delete(obj1)
console.log(ws)
console.log(ws.has(obj2))
//WeakSet 没有size属性,没有办法遍历它的成员。
WeakSet 中的对象都是弱引用,即垃圾回收机制(可以理解为当前对象每被引用一次就会+1 只要当前对象值不为0 就不会被回收 一直+1会造成内存泄漏),不考虑 WeakSet 对该对象的引用,如果不存在以上垃圾回收机制的问题 引用了就为1 没引用就为0 不存在内存泄漏的问题,适合临时存放一些对象、与对象绑定一些相关的信息。
一个前端小白,若文章有错误内容,欢迎大佬指点讨论!