当前位置: 首页 > news >正文

JS数据类型——【set】精讲

在JavaScript中,Set 是一种集合数据结构,用于存储独特的值。与数组不同,Set 中的每个值都是唯一的,这意味着集合中不会有重复的元素。接下来,我将详细介绍 Set 的相关知识点。

1. 创建 Set

可以使用 Set 构造函数创建一个新的集合:

const mySet = new Set();

你还可以传递一个可迭代对象(如数组)来初始化集合:

const mySet = new Set([1, 2, 3, 4]);

2. 基本方法

  • add(value):向集合中添加一个值。如果值已经存在,则不执行任何操作。

    mySet.add(5);  // 添加值5
    mySet.add(1);  // 1已经存在,不会重复添加
    
  • delete(value):从集合中删除一个值。如果该值存在,则返回 true,否则返回 false

    mySet.delete(2);  // 删除值2
    
  • has(value):检查集合中是否存在某个值。返回 truefalse

    console.log(mySet.has(3));  // true
    
  • clear():清空集合,删除所有元素。

    mySet.clear();  // 清空集合
    

3. 属性

  • size:返回集合中元素的个数。

    console.log(mySet.size);  // 集合的大小
    

4. 遍历 Set

Set 是可迭代的,你可以使用 for...of 循环、forEach 方法或解构赋值来遍历 Set 中的元素。

  • for...of 循环

    for (const value of mySet) {console.log(value);
    }
    
  • forEach 方法

    mySet.forEach((value) => {console.log(value);
    });
    
  • 解构赋值

    const arr = [...mySet];  // 将Set转换为数组
    

5. Set 与数组的转换

  • 数组转换为 Set

    const myArray = [1, 2, 3, 4];
    const mySet = new Set(myArray);
    
  • Set 转换为数组

    const mySet = new Set([1, 2, 3, 4]);
    const myArray = Array.from(mySet);
    

6. Set 的应用场景

  • 数组去重:可以使用 Set 来去除数组中的重复元素。

    const numbers = [1, 2, 2, 3, 4, 4, 5];
    const uniqueNumbers = [...new Set(numbers)];
    console.log(uniqueNumbers);  // [1, 2, 3, 4, 5]
    
  • 高效查找:由于 Set 内部实现使用了类似哈希表的结构,因此查找元素的效率较高。

7. WeakSet

WeakSetSet 的一种变体,但只能存储对象,并且对象是弱引用(不会阻止垃圾回收)。因此,它通常用于跟踪对象的存在,而不影响对象的生命周期。

  • 创建 WeakSet

    const ws = new WeakSet();
    
  • adddeletehas 方法:与 Set 类似,但不能使用 size 属性,也无法遍历。

8. 注意事项

  • Set 内部元素的比较是基于 “SameValueZero” 算法的,这与严格相等 (===) 非常相似,但区别在于它将 NaN 视为相等。

    const set = new Set([NaN, NaN]);
    console.log(set.size);  // 1
    

9. 实际用例

  • 交集:两个集合的交集。

    const setA = new Set([1, 2, 3]);
    const setB = new Set([2, 3, 4]);
    const intersection = new Set([...setA].filter(x => setB.has(x)));
    console.log(intersection);  // Set {2, 3}
    
  • 并集:两个集合的并集。

    const union = new Set([...setA, ...setB]);
    console.log(union);  // Set {1, 2, 3, 4}
    
  • 差集:集合 A 相对于集合 B 的差集。

    const difference = new Set([...setA].filter(x => !setB.has(x)));
    console.log(difference);  // Set {1}
    

总结

Set 是一种非常有用的数据结构,尤其适用于需要存储唯一值、数组去重以及高效查找等场景。通过掌握基本方法和遍历操作,可以在日常编程中更灵活地使用 Set

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 前沿重器[55] | prompt综述的解释和个人思考
  • FreeSWITCH 1.10.10 简单图形化界面28 - 麒麟V10 SP3服务器系统X86和ARM版本安装FreeSWITCH
  • 从行或列的角度思考矩阵-向量乘法(matrix-vector multiplication)
  • I2C总线中的时钟延长和死锁
  • 华为EVPN网关配置
  • OpenCV几何图像变换(8)调整图像大小的函数resize()的使用
  • 学懂C++(四十三):深入剖析现代C++设计模式:从常用经典到前沿的全面解析
  • 有限差分学习笔记
  • Cortex-A7的GIC(通用中断控制器):中断处理状态机
  • 知识图谱用于推荐系统问题
  • odoo SyntaxWarning: invalid escape sequence ‘\w‘
  • Java nio pipe 相似的 api
  • Linux系统中使用socket编程进行网络通信
  • 多维系统下单点登录之整理解决方案
  • 数字虚拟人原理
  • co模块的前端实现
  • happypack两次报错的问题
  • IDEA常用插件整理
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • mac修复ab及siege安装
  • Magento 1.x 中文订单打印乱码
  • mongo索引构建
  • MYSQL 的 IF 函数
  • Spark学习笔记之相关记录
  • VuePress 静态网站生成
  • 大数据与云计算学习:数据分析(二)
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 开发基于以太坊智能合约的DApp
  • 前端技术周刊 2019-01-14:客户端存储
  • 入门到放弃node系列之Hello Word篇
  • 一个项目push到多个远程Git仓库
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • Spring第一个helloWorld
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​什么是bug?bug的源头在哪里?
  • #git 撤消对文件的更改
  • #if等命令的学习
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $.ajax()方法详解
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (Java入门)抽象类,接口,内部类
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (Oracle)SQL优化技巧(一):分页查询
  • (笔试题)分解质因式
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (汇总)os模块以及shutil模块对文件的操作
  • (剑指Offer)面试题34:丑数
  • (三十五)大数据实战——Superset可视化平台搭建
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (转)总结使用Unity 3D优化游戏运行性能的经验