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

JavaScript Set基础与实战应用

在JavaScript中,Set是一种非常有用的数据结构,它提供了一种存储唯一值的方式。与数组不同,Set中的每个值都是唯一的,这意味着集合中不会有重复的元素。本文将详细介绍Set的基本用法、特性以及高级操作,帮助你全面掌握这一数据结构。

一、Set的基本用法

1. 创建Set

你可以使用Set构造函数来创建一个新的Set实例。Set可以接受一个数组(或其他可迭代对象)作为参数来初始化集合。

// 创建一个空的Set
const mySet = new Set();

// 创建一个包含初始元素的Set
const initialSet = new Set([1, 2, 3, 4, 5]);

// 使用数组来创建Set,同时去除重复元素
const duplicatesArray = [2, 3, 4, 4, 5, 5];
const uniqueSet = new Set(duplicatesArray); // 此时 uniqueSet 为 {2, 3, 4, 5}

2. 添加元素

使用add()方法可以向Set中添加新的元素。如果添加的元素已经存在,则不会重复添加。

mySet.add(1);
mySet.add(2);
mySet.add(3);

3. 删除元素

使用delete()方法可以从Set中删除指定的元素。如果删除成功,则返回true;否则返回false

mySet.delete(2); // 从Set中删除元素2

4. 检查元素

使用has()方法可以检查Set中是否包含某个元素。如果包含,则返回true;否则返回false

mySet.has(1); // 检查Set中是否存在元素1,返回结果为 true

5. 清空Set

使用clear()方法可以清空Set中的所有元素。

mySet.clear(); // 清空Set

6. 获取Set的大小

使用size属性可以获取Set中元素的数量。

let sizedSet = new Set([1, 2, 3, 4, 5]);
console.log(sizedSet.size); // 输出: 5

二、Set的特性

1. 唯一性

Set中的元素是唯一的,这意味着不会有重复的元素。这是Set与数组最显著的区别之一。

const mySet = new Set([1, 2, 2, 3, 4, 4, 5]);
console.log(mySet); // 输出: Set { 1, 2, 3, 4, 5 }

2. 无序性

Set中的元素是无序的,这意味着你不能通过索引来访问元素。元素的排列顺序不是按照插入的顺序来决定的。

const unorderedSet = new Set();
unorderedSet.add(3);
unorderedSet.add(1);
unorderedSet.add(2);
console.log(unorderedSet); // 输出: Set { 3, 1, 2 }

3. 可迭代性

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

// 使用for...of循环遍历Set
for (let item of mySet) {
    console.log(item);
}

// 使用forEach方法遍历Set
mySet.forEach(value => {
    console.log(value);
});

// 使用解构赋值将Set转换为数组
const arr = [...mySet];

三、Set的高级操作

1. 集合运算

虽然Set本身没有直接提供并集、差集和交集等集合运算的方法,但你可以通过一些简单的操作来实现这些功能。

并集

并集是指两个集合中所有不重复元素的集合。

function union(setA, setB) {
    return new Set([...setA, ...setB]);
}

const setA = new Set([1, 2, 3]);
const setB = new Set([3, 4, 5]);
const unionSet = union(setA, setB);
console.log(unionSet); // 输出: Set { 1, 2, 3, 4, 5 }
差集

差集是指在一个集合中存在,但在另一个集合中不存在的元素的集合。

function difference(setA, setB) {
    return new Set([...setA].filter(x => !setB.has(x)));
}

const differenceSetA = difference(setA, setB);
console.log(differenceSetA); // 输出: Set { 1, 2 }
交集

交集是指两个集合中都存在的元素的集合。

function intersection(setA, setB) {
    return new Set([...setA].filter(x => setB.has(x)));
}

const intersectionSet = intersection(setA, setB);
console.log(intersectionSet); // 输出: Set { 3 }

2. 类型和值的比较

Set中,值的比较是基于“Same-value-zero equality”算法的,这与严格相等(===)非常相似,但有一些区别。例如,NaNSet中被视为相等。

const mySet = new Set();
mySet.add(NaN);
mySet.add(NaN);
console.log(mySet.size); // 输出: 1

3. 与数组的转换

你可以轻松地将Set转换为数组,或者将数组转换为Set以去除重复元素。

// Set转换为数组
const arr = Array.from(mySet);

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

四、总结

Set是JavaScript中一个非常有用的数据结构,它提供了一种存储唯一值的方式。通过掌握Set的基本用法、特性以及高级操作,你可以在开发过程中更加灵活地处理集合数据。无论是去除数组中的重复元素,还是进行集合运算,Set都能提供简洁而高效的解决方案。


http://www.kler.cn/news/328196.html

相关文章:

  • 基于大数据的健身器材销售数据分析及可视化系统
  • Python:lambda 函数详解 以及使用
  • 如何在本地和远程删除 Git 分支
  • SQL,将多对多的关联记录按行输出
  • Qt Creator安卓环境配置【筑基篇】
  • 数据结构-4.1.特殊矩阵的压缩存储
  • 【STM32单片机_(HAL库)】4-3-2【定时器TIM】测量按键按下时间1——编程实现捕获功能
  • 在Unity编辑器中实现组件的复制与粘贴:完整指南
  • Vue3学习(六)Vue3 + ts几种写法
  • 深入工作流调度的内核
  • 等保测评:企业数字安全的坚实盾牌
  • [Docker学习笔记]利用Dockerfile创建镜像
  • 无人机之编队控制篇
  • 速盾:cdn是怎么加速视频的?
  • C++第3课——保留小数点、比较运算符、逻辑运算符、布尔类型以及if-else分支语句(含视频讲解)
  • JAVA连接HDFS操作
  • docker(1) --- win11环境配置
  • React Native使用高德地图
  • vscode 的terminal 输出打印行数限制设置
  • 深度学习之贝叶斯分类器
  • camunda + oracle 启动报错 解决方法
  • Nginx的命令行控制
  • NLP:BERT的介绍并使用该模型计算文本相似度
  • VS2013 运行Qt生成的.exe报错
  • 【系统架构设计师】专题:需求工程总结
  • Qwen2-VL论文阅读笔记
  • 开发环境搭建之VScode的安装及使用
  • 性能微基准测试JMH
  • 数据结构-4.栈与队列
  • Transformer 算法模型详解