JavaScript的Set是存储唯一值的内置集合,用于去重、存在性判断和集合运算;与数组相比,它拒绝重复、无索引、不保证遍历顺序,提供add/has/delete等高效集合操作。
JavaScript 的 Set 是一种内置集合数据结构,专门用来存储**唯一值**——无论原始值还是对象引用,重复添加的值
会被自动忽略。它不是数组的替代品,而是解决特定问题的工具:去重、快速存在性判断、集合运算。
数组允许完全相同的元素多次出现,而 Set 天然拒绝重复:
[1, 1, 2, 2, 3] 是合法且保留全部 5 个元素的;new Set([1, 1, 2, 2, 3]) 实际只存 {1, 2, 3},.size 为 3。数组按插入顺序严格排列,每个元素有确定索引(arr[0]、arr[1]);Set 没有索引,不保证遍历顺序(尽管现代引擎大多保持插入顺序,但规范不保证,不可依赖):
set[0] 访问元素;Array.from(set) 或 [...set])或用 for...of 迭代。数组靠索引和方法链操作(push、filter、map);Set 提供语义更清晰的集合操作 API:
立即学习“Java免费学习笔记(深入)”;
add(value) —— 添加,自动去重,返回自身(可链式);has(value) —— 判断是否存在,时间复杂度 O(1),比数组 includes() 或 indexOf() 快得多;delete(value) —— 按值删除(无需找索引),返回布尔值;clear() 和 size 属性 —— 清空和计数,比数组 length = 0 或手动计数更直观。选数组,当你需要:
arr[2] = 'x');map、reduce、sort 等高阶函数。选 Set,当你需要:
[...new Set(arr)] 是最简去重写法);filter 很容易实现。