Set
Set 与数组类似, Set 集合中的元素不重复。
- 查找元素: 在数组中使用 indexOf() 或 includes() 检查元素是否存在比较慢。
- 删除元素: 在 Set 中,可以通过值删除元素。即在数组中,基于索引的splice() 功能。
- 插入元素: 在 Set 中添加元素比在数组中通过 push()、 unshift() 或其他同类操作要快。
- 去重: Set 对象仅能存储不同的值。
let arr = [1,1,2,2,3,3]
let set = [...new Set(arr)]
let item = 3
let itemIdx = 2
查找快的原因:时间复杂度
set.has(item) //O(1)
arr.indexOf(item) // O(n)
arr.includes(item) // O(n)
删除元素不需要知道索引
set.delete(item)
arr.splice(itemIdx, 1)
插入元素
set.add(item)
arr.push(item)
arr.unshift(item)
去重
let arr = [1,1,2,2,3,3]
let unq = [...new Set(arr)]
// [1,2,3]
Set 常用操作方法
方法/属性 | 功能介绍 |
---|---|
size | 获取当前Set对象的长度 |
add(value) | 向当前Set对象中添加一个值,返回的是Set对象,所以支持链式写法 |
delete(value) | 删除当前Set对象中的一个值,返回一个布尔值,表示是否删除成功 |
has(value) | 检测这个value是否是当前Set对象的一个元素,通过返回的布尔值表示 |
clear() | 清除当前Set对象所有元素,没有返回值 |
Set 遍历方法
方法/属性 | 功能介绍 |
---|---|
keys() | 返回该Set对象键名的遍历器,等同values() |
values() | 返回该Set对象键值的遍历器,等同keys() |
entries() | 返回该Set对象键值对的遍历器(目前感觉没什么用) |
forEach() | 使用回调函数遍历该Set对象的每个元素 |
for(let i of set.keys()){
console.log(i);
}
// 0, 1, 2
set.forEach((value, key, _set) => {
console.log(value, key, _set)
})
关于WeakSet
WeakSet 类似于Set 的数据结构,不可重复
WeakSet的成员只能是对象,并且都是弱引用
不能遍历
WeakSet 没有size, 也没有clear