登录
首页 >  文章 >  前端

JavaScript Set是什么_和数组有什么不同?

时间:2025-12-21 16:36:20 400浏览 收藏

推广推荐
免费电影APP ➜
支持 PC / 移动端,安全直达

从现在开始,我们要努力学习啦!今天我给大家带来《JavaScript Set是什么_和数组有什么不同?》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

JavaScript 的 Set 是用于存储唯一值的无序集合,自动去重、不支持索引访问、具备 O(1) 查存性能,适用于去重、存在性判断和集合运算等场景。

JavaScript Set是什么_和数组有什么不同?

JavaScript 的 Set 是一种内置的数据结构,用来存储**唯一值的集合**——它自动过滤重复项,不关心顺序,也不提供索引访问。和数组(Array)看起来相似,但设计目标和行为逻辑完全不同。

Set 的核心特点

• 值唯一:同一值只能存在一次,重复添加会被忽略。
• 无序:插入顺序不保证遍历顺序(尽管当前引擎大多保持插入序,但这不是规范要求)。
• 无索引:不能用 set[0] 取值,必须用迭代或转换成数组才能按位置访问。
• 支持任意类型:数字、字符串、布尔、对象、函数、甚至 NaN(Set 中的 NaN 被视为同一个值,这点比数组的 indexOf 更合理)。

和数组最直观的区别

去重能力:Set 天然去重;数组默认保留所有元素,去重要靠额外逻辑(如 [...new Set(arr)])。
访问方式:数组靠索引(arr[2]),Set 靠方法(set.has(x)set.add(x))。
长度属性名不同:数组是 .length,Set 是 .size
遍历方式类似但不可互换:两者都支持 for...offorEach,但数组有 map/filter 等高阶方法,Set 没有,需先转数组。

什么时候该用 Set 而不是数组?

• 需要频繁判断某个值“是否存在”(has() 是 O(1),比数组 includes() 或循环快得多)。
• 处理大量数据并确保唯一性(比如用户 ID 列表、日志事件类型统计)。
• 做集合运算(并集、交集、差集),用 Set 搭配展开语法或过滤更简洁。例如:
const union = new Set([...setA, ...setB]);
const intersection = new Set([...setA].filter(x => setB.has(x)));

简单转换很常见

• 数组 → Set:new Set([1,2,2,3])Set {1, 2, 3}
• Set → 数组:Array.from(mySet)[...mySet]
• 注意:对象或数组等引用类型在 Set 中仍按引用判重,两个内容相同但地址不同的数组,会被视为不同成员。

基本上就这些。用对场景,Set 就是轻量又高效的“去重+查存”利器。

到这里,我们也就讲完了《JavaScript Set是什么_和数组有什么不同?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>