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

深入理解 JavaScript 的 Set 对象

Set 对象是 JavaScript 中一个非常有用的数据结构,它允许存储任何类型的唯一值。无论是原始值还是对象引用,Set 都能确保每个值在集合中只出现一次。本文将带你全面了解 Set 的特性、用途以及与其他数据结构的对比。


Set、Map 和 Array 的对比

特性SetMapArray
数据存储唯一值集合键值对集合有序列表
键的类型无键,仅存储值任意类型索引(数字)
值的类型任意类型任意类型任意类型
元素是否唯一
迭代顺序插入顺序插入顺序索引顺序
访问方式has(value)get(key)array[index]
添加元素add(value)set(key, value)push(value)
删除元素delete(value)delete(key)splice(index, 1)
清空集合clear()clear()array.length = 0
大小属性sizesizelength
是否支持重复值
常见用途唯一值集合、集合运算键值对存储有序数据列表
是否支持迭代器
是否支持类集合操作是(如交集、并集等)

适用场景

  • Set: 适用于需要存储唯一值的场景,例如去重操作或集合运算。
  • Map: 适用于需要存储键值对的场景,例如对象映射或缓存。
  • Array: 适用于需要存储有序数据列表的场景,例如列表操作或索引访问。

什么是 Set?

Set 是一个集合(collection),其中的元素是唯一的,并且按照插入顺序存储。它可以存储任何类型的值,包括原始值和对象。

特性

  1. 唯一性:集合中的每个值只能出现一次。
  2. 插入顺序Set 会按照值插入的顺序进行迭代。
  3. 零值相等Set 使用“零值相等”算法来判断值是否相等,例如 0-0 被认为是相等的,而 NaNNaN 也被认为是相等的。

如何使用 Set?

构造函数

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

// 使用可迭代对象初始化 Set
const set2 = new Set([1, 2, 3, 4, 5]);
console.log(set2); // Set(5) {1, 2, 3, 4, 5}

常用方法

const set = new Set();

// 添加元素
set.add(1);
set.add(2);
set.add(3);

// 检查元素是否存在
console.log(set.has(2)); // true
console.log(set.has(4)); // false

// 删除元素
set.delete(2);
console.log(set.has(2)); // false

// 获取集合大小
console.log(set.size); // 2

// 清空集合
set.clear();
console.log(set.size); // 0

Set 的高级用法

集合运算

Set 提供了一些方法,可以像数学运算一样操作集合:

  • 差集A.difference(B) 返回 A 中不包含 B 的部分。
  • 交集A.intersection(B) 返回 AB 的交集。
  • 对称差A.symmetricDifference(B) 返回 (A - B) ∪ (B - A)
  • 并集A.union(B) 返回 AB 的合集。
  • 子集A.isSubsetOf(B) 检查 A 是否是 B 的子集。
  • 超集A.isSupersetOf(B) 检查 A 是否包含 B

示例

const setA = new Set([1, 2, 3]);
const setB = new Set([3, 4, 5]);

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

// 交集
const intersection = new Set([...setA].filter(x => setB.has(x)));
console.log(intersection); // Set(1) {3}

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

类集合对象

Set 的一些方法(如 unionintersection 等)要求 this 是一个实际的 Set 实例,但参数只需要是类集合对象。类集合对象需要满足以下条件:

  1. 拥有 size 属性。
  2. 拥有 has 方法。
  3. 拥有 keys 方法,返回集合中元素的迭代器。

例如,Map 是一个类集合对象,因为它具有 sizehaskeys 方法。


性能优势

Sethas 方法在检查某个值是否存在时,性能优于数组的 includes 方法,尤其是当集合的大小较大时。


示例:从数组中去重

const numbers = [1, 2, 2, 3, 4, 4, 5];
const uniqueNumbers = [...new Set(numbers)];
console.log(uniqueNumbers); // [1, 2, 3, 4, 5]

总结

Set 是一个强大的工具,适用于需要存储唯一值的场景。通过本文的介绍,你应该对 Set 的特性、用法以及与其他数据结构的对比有了更深入的了解。希望你能在实际开发中灵活运用 Set,提升代码的效率和可读性!

相关文章:

  • 全面解析PRN文件:从原理到可视化的完整指南 【标签打印】
  • MySql修改全部表和字段编码
  • 计算机体系结构的性能瓶颈100例
  • opencv在iOS 中的使用
  • Linux | i.MX6ULL 终结者学习指南(1)
  • MyBatis分页插件混用问题解析:IPage与PageHelper的冲突与解决
  • Linux系统部署OA项目
  • 初识MySQl · 内置函数
  • OpenCV图像处理:边缘检测
  • YOLOv8 中的损失函数解析
  • 《 C语言实现:金字塔式星号图案打印》
  • Transformer革命:人工智能如何突破语言理解的边界
  • MCP 学习笔记(1)
  • 广告牌变“高空炸弹“?智能预警终端筑起安全防线!
  • [原创](Modern C++)现代C++的关键性概念: 如何利用多维数组的指针安全地遍历所有元素
  • 解读Linux中的fork机制
  • kafka 报错消息太大解决方案 Broker: Message size too large
  • Error:Flash Download failed
  • 应用UID分配
  • 构建大语言模型应用:句子转换器(Sentence Transformers)(第三部分)
  • 上海电视节评委会名单公布,陈宝国担任电视剧评委会主席
  • 首届巴塞尔艺术奖公布:大卫·哈蒙斯、曹斐等36人获奖
  • 全总联合六部门印发工作指引,共保劳动者合法权益
  • 铜川耀州窑遗址内违法矿场存在多年,省市区文物部门多次处罚叫停仍在生产
  • 国家统计局:4月份各线城市商品住宅销售价格环比持平或略降
  • 广东信宜一座在建桥梁暴雨中垮塌,镇政府:未造成人员伤亡