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

JavaScript数据结构-Set的使用

在 JavaScript 中,Set 是 ES6 引入的一个新数据结构,它允许我们存储一组唯一的值。这使得 Set 成为许多场景下的理想选择,特别是当我们需要对数组进行去重操作时经常被提起和使用。

一、基本概念

Set 是一种集合(Set)类型的数据结构,类似于数组,但与数组有以下几个显著的区别:

  • ‌唯一性‌
    Set 中的元素是唯一的,重复值会被自动过滤。支持存储任意类型(原始值、对象引用等)‌。
  • ‌无序性‌
    元素存储顺序遵循插入顺序,但无法通过索引访问‌。
  • 值的类型广泛
    可以存储任何类型的值,包括原始值(如数字、字符串、布尔值等)和引用类型(如对象、数组、函数、Symbol等)

二、创建

1、‌创建一个空 Set‌

const emptySet = new Set();

2、传入可迭代对象创建

const numSet = new Set([1, 2, 3, 3]);
// 解释:会将数组中的每个数字作为单独的元素添加到Set中,同时添加时重复值会被自动过滤,结果是 {1, 2, 3}

const strSet = new Set("hello");
// 解释:会将数字符串中的每个字符作为单独的元素添加到Set中,同时添加时重复值会被自动过滤,结果是 {'h', 'e', 'l', 'o'}

此方式常被用于数组去重‌。

三、常用属性和方法

  • add() 添加元素,返回 Set 本身(支持链式调用) ;
    const mySet= new Set();
    mySet.add(1).add(2)
    
  • has() 检查元素是否存在,返回布尔值
    mySet.has(2); // 存在返回true,不存在返回false
    
  • delete() 删除元素,返回是否删除成功
    mySet.delete(2); // true
    
  • clear() 清空所有元素
    mySet.clear();
    
  • size属性,返回Set中的数量
    mySet.size   // 3
    

四、遍历操作

1、‌forEach 方法‌

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

2、‌for…of 循环‌

for (const item of mySet) { console.log(item); }

3、‌转换为数组‌

const arr1 = [...mySet];
const arr2 = Array.from(mySet);

4、entries() 返回迭代器
返回一个包含 [value, value] 对的迭代器,用于遍历 Set 中的所有元素。由于 Set 没有键值对的概念,每个元素的键和值相等‌。
例如元素 “a” 会生成 [“a”, “a”],此设计是为了与 Map 的 entries() 方法保持接口一致性‌

const mySet = new Set(["a", "b", "c"]);
const iterator = mySet.entries();

for (const entry of iterator) {
  console.log(entry); // 输出: ["a", "a"], ["b", "b"], ["c", "c"]
}

// 转换为数组
const entriesArray = [...iterator]; 
// 结果: [["a","a"], ["b","b"], ["c","c"]]

五、应用场景

1、数据去重‌

const uniqueArray = [...new Set([1, 2, 2, 3])]; // [1, 2, 3]

2、快速查找
Set提供了快速的查找操作,时间复杂度为O(1)。如果有大量的元素需要进行查找,并且不关心顺序,使用Set会比数组更加高效。

const mySet = new Set([1, 2, 3, 4, 5]); 
console.log(mySet.has(3)); // true 
console.log(mySet.has(6)); // false

3、‌集合运算‌
‌并集‌:new Set([…setA, …setB])
‌交集‌:new Set([…setA].filter(x => setB.has(x)))
‌差集‌:new Set([…setA].filter(x => !setB.has(x)))‌

4‌、高效查找/删除‌
Set 的 has 和 delete 操作时间复杂度为 O(1),优于数组的遍历操作‌。

六、注意事项

  • ‌全等匹配‌
    Set 使用 === 判断元素是否重复,例如 5 和 “5” 视为不同值。
  • ‌NaN 的特殊处理‌
    Set 认为 NaN === NaN,即使 NaN !== NaN 在常规 JS 中成立‌。
  • ‌对象引用唯一性‌
    const obj = {};
    mySet.add(obj);
    mySet.add(obj);   // 不重复
    mySet.add({});    // 视为新对象,重复添加
    

七、小结

JavaScript中的Set数据结构以其唯一性、无序性和灵活性,成为处理不重复数据的首选工具。无论是去重、快速查找还是集合运算,Set都能提供高效且简洁的解决方案,大大简化了数据处理流程。

相关文章:

  • 宇树科技嵌入式面试题及参考答案(春晚机器人的公司)
  • Idea配置注释模板
  • 什么是安全组及其作用?
  • Zabbix+Deepseek实现AI告警分析(非本地部署大模型版)
  • 【微信小程序】每日心情笔记
  • idea中隐藏目录
  • 深入解析 Nmap 扫描机制的底层原理
  • 海康摄像头接入流媒体服务器实现https域名代理播放
  • Element UI-Select选择器结合树形控件终极版
  • CSS【实战】模拟 html 的 title 属性(鼠标悬浮显示提示文字)
  • 【智慧零售技术实战】云里物里ESL方案解析:四色电子纸+批量刷新功能如何高效能改造传统卖场?
  • python-leetcode-打家劫舍 III
  • Android 自定义View 加 lifecycle 简单使用
  • 大白话Vue 源码
  • linux进程调度-在系统调用时期调度
  • 人机交互进化论:解码智能手机81种交互方式背后的用户体验革命
  • [场景题]如何实现排行榜
  • 安装微软最新原版系统,配置好系统驱动并保留OOBE全新体验
  • 备考六级:词汇量积累(day3)
  • 人工智能之数学基础:矩阵的秩
  • 体育文化赋能国际交流,上海黄浦举办国际友人城市定向赛
  • 全国游泳冠军赛:孙杨、潘展乐同进400自决赛,今晚将正面对决
  • 国际金价下跌,中概股多数上涨,穆迪下调美国主权信用评级
  • 首次带人形机器人走科技节红毯,傅利叶顾捷:机器人行业没包袱,很多事都能从零开始
  • 朝鲜称将在各领域采取反制措施,应对美国敌对挑衅
  • 泉州围头湾一港区项目炸礁被指影响中华白海豚,官方:已叫停重新评估