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

05 ES6中的Set类型

ES6 中引入的 Set 对象是一种集合数据结构,它存储不重复的值,类似于数组,但数组可以包含重复的元素,而 Set 不会。以下是 Set 对象的一些关键特性和常用方法:

特性

  1. 唯一性Set 中的每个值必须是唯一的,不允许重复。
  2. 无序性:虽然 Set 是通过添加顺序来存储元素,但这个顺序并不在集合中体现,不能通过索引来访问元素。
  3. 类型多样性:可以存储任何类型的值,包括对象。

创建 Set

  • 使用 new Set() 构造函数创建一个空的 Set
  • 也可以在创建时传入一个可迭代对象(如数组),自动去除其中的重复元素。
let mySet = new Set();
let mySetFromArray = new Set(['a', 'b', 123, 123, true, 123123123]);

常用方法

  1. size:返回 Set 实例的成员总数。

    console.log(mySetFromArray.size); // 输出: 5
    
  2. add(value):添加一个元素到 Set 对象,返回 Set 结构本身。

    mySet.add('海绵宝宝');
    
  3. delete(value):从 Set 对象中移除一个元素。

    mySet.delete('b');
    
  4. has(value):检查 Set 对象是否包含某个值,返回布尔值。

    console.log(mySet.has(123)); // 输出: true 或 false
    
  5. clear():移除 Set 对象中的所有元素。

    mySet.clear();
    
  6. forEach(callbackFn, thisArg):对 Set 对象中的每个值执行给定函数。

    mySet.forEach((value) => console.log(value));
    

转换为数组

  • 使用扩展运算符 ... 可以将 Set 转换为数组。
  • 使用 Array.from() 方法也可以将 Set 转换为数组。
let arrayFromSet = [...mySetFromArray];
let arrayFromSet2 = Array.from(mySetFromArray);

数组去重

  • 使用 Set 可以轻松实现数组去重。
let arr = [1, 11, 12, 23, 22, 11, 12, 1, 4, 64, 3];
let uniqueNumbers = new Set(arr);
let resArr = [...uniqueNumbers];

注意事项

  • Set 中的元素是按插入顺序存储的,但只能通过迭代访问。
  • 虽然 Set 可以存储对象,但对象作为 Set 的元素时,是通过引用比较的,因此相同的对象会被视为不同的元素。

示例

// 创建一个 Set 实例
let mySet = new Set(['a', 'b', 123, true]);// 打印 Set 实例
console.log(mySet); // 输出: Set { 'a', 'b', 123, true }// 获取 Set 的大小
console.log(mySet.size); // 输出: 4// 添加元素
mySet.add('海绵宝宝');
console.log(mySet); // 输出: Set { 'a', 'b', 123, true, '海绵宝宝' }// 删除元素
mySet.delete('b');
console.log(mySet); // 输出: Set { 'a', 123, true, '海绵宝宝' }// 检查元素是否存在
console.log(mySet.has(123)); // 输出: true// 清空 Set
mySet.clear();
console.log(mySet); // 输出: Set {}

通过这些特性和方法,Set 对象提供了一种强大且灵活的方式来处理不重复的集合数据。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • openssl req 详解
  • c++——map和set
  • 解决vscode+UE5中vscode无法识别头文件,无法函数无法跳转,也无法自动补全的问题。
  • 科研绘图系列:R语言和弦图 (Chord diagram)
  • 自动驾驶(八十六)---------通信中间件Fdbus
  • C#测试控制台程序调用Quartz.NET的基本用法
  • OpenCV 卷积 Robert算子,Laplance算子,Sobel算子,Canny边缘检测原理
  • 【DVWA靶场】Web安全之(布尔值/延时型)SQL盲注(超详细教程)
  • Android RSA 加解密
  • stm32F1xx时钟配置分析总结
  • linux快速入门-学习笔记
  • Adobe“加速”创意人士开启设计新篇章
  • MongoDB教程(二十二):MongoDB固定集合
  • [k8s源码]8.deltaFIFO
  • Vue Router基础
  • 【知识碎片】第三方登录弹窗效果
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • canvas绘制圆角头像
  • CentOS6 编译安装 redis-3.2.3
  • ES6系列(二)变量的解构赋值
  • FastReport在线报表设计器工作原理
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Java的Interrupt与线程中断
  • leetcode46 Permutation 排列组合
  • mockjs让前端开发独立于后端
  • opencv python Meanshift 和 Camshift
  • Python利用正则抓取网页内容保存到本地
  • vue-router 实现分析
  • 从0到1:PostCSS 插件开发最佳实践
  • 前嗅ForeSpider中数据浏览界面介绍
  • 事件委托的小应用
  • 第二十章:异步和文件I/O.(二十三)
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​水经微图Web1.5.0版即将上线
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $jQuery 重写Alert样式方法
  • (160)时序收敛--->(10)时序收敛十
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转载)虚函数剖析
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET CLR Hosting 简介
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Remoting学习笔记(三)信道
  • .NET 事件模型教程(二)
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET微信公众号开发-2.0创建自定义菜单