JavaScript Set 的用法与理解

本文深入探讨了Set和WeakSet数据结构的特点与应用。详细解释了Set如何进行快速查找、删除和插入元素,以及其去重特性。同时,对比了Set与数组在操作效率上的差异。此外,还介绍了WeakSet的特殊性质及其与Set的不同之处。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值