Set天生去重,支持任意类型值(对象按引用判断),可用.add()添加、.has()检查、.delete()删除、.clear()清空,遍历用for...of或.forEach(),转数组用[...s]或Array.from(s),常用于一行去重:[...new Set(arr)]。

JS 中用 Set 存储唯一不重复的值集合非常直接——它天生就只允许每个值出现一次,无论原始数据是否重复,插入时自动去重。
创建 Set 并添加唯一值
用 new Set() 初始化,再通过 .add() 方法逐个或批量添加值。重复添加同一值不会报错,也不会改变 Set 内容。
const s = new Set(); s.add(1).add(2).add(1); // s 里只有 {1, 2}- 也可用数组初始化:
const s = new Set([1, 2, 2, 3]); // 自动去重 → {1, 2, 3} - 支持任意类型值(包括对象、NaN),注意:对象按引用判断唯一性,两个字面量对象始终不同
判断是否存在 & 删除指定值
用 .has() 检查值是否已存在,用 .delete() 移除指定值,返回布尔值表示是否成功。
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。
s.has(2); // trues.delete(2); // true;再次 delete(2) 返回 false-
.clear()可清空整个 Set
遍历与转换为其他格式
Set 支持 for...of、.forEach() 遍历,也容易转成数组或 JSON 友好格式。
for (const item of s) { console.log(item); }-
[...s]展开为数组(最常用) -
Array.from(s)效果相同,适合需映射的场景,如Array.from(s, x => x * 2) - 注意:Set 本身不能直接
JSON.stringify(),需先转数组
和数组去重的常见配合用法
利用 Set 天然去重特性,一行代码实现数组去重是最典型用法。
const arr = [1, 2, 2, 3, 3]; const unique = [...new Set(arr)]; // [1, 2, 3]- 对对象数组去重需额外处理(Set 无法直接比较对象属性),通常配合 Map 或 findIndex 实现
- 若需保留首次出现顺序,Set 默认就满足;若需按其他逻辑排序,转数组后调用
.sort()










