JS中遍历Set集合最推荐for...of循环,因其简洁高效、保持插入顺序且不额外占用内存;其次可用forEach方法或转为数组后操作;for...in和JSON.stringify不适用,应避免。

JS 中遍历 Set 集合有多种方式,最常用且推荐的是 for...of 循环,它直接按插入顺序访问每个元素,简洁高效。
使用 for...of 循环(推荐)
Set 是可迭代对象,for...of 是最自然、最直观的方式:
- 无需转换为数组,不额外占用内存
- 保持插入顺序(Set 本身保证插入顺序)
- 语法清晰,语义明确
示例:
const mySet = new Set(['a', 'b', 'c']);
for (const item of mySet) {
console.log(item); // 输出: 'a', 'b', 'c'
}
使用 forEach() 方法
Set 提供原生的 forEach 方法,参数与数组类似,接收回调函数(value, value, set),注意第一个和第二个参数相同(因为 Set 没有键,只有值):
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。
- 适合需要链式调用或习惯函数式风格的场景
- 不能用
break或return false中断循环(需用some/every替代逻辑中断)
示例:
mySet.forEach((value) => {
console.log(value);
});
转换为数组后遍历(按需使用)
如果需要数组方法(如 map、filter、索引操作等),可用扩展运算符或 Array.from() 转换:
-
[...mySet]—— 简洁,适用于大多数情况 -
Array.from(mySet)—— 兼容性更好(支持旧版浏览器)
示例:
const arr = [...mySet]; arr.forEach(x => console.log(x)); // 或带处理 const doubled = [...mySet].map(x => x + x);
不推荐:for...in 或 JSON.stringify
for...in 遍历的是属性名(包括原型链上的),Set 实例没有可枚举自有属性,所以不会输出任何元素;JSON.stringify(new Set()) 返回空对象 {},无法用于遍历。这两种方式都不适用,应避免。

















