javascript中set与数组互转靠构造函数和展开运算符或array.from():数组→set用new set(array)自动去重,set→数组用[...myset]或array.from(myset),均保持插入顺序。

JavaScript 中 Set 与数组的互相转换非常简单,核心靠构造函数和展开运算符(...)或 Array.from() 方法,无需手动遍历。
数组 → Set(去重并转为集合)
用 new Set(array) 直接构造,自动去除重复项,保留原始顺序。
- 基础写法:
const mySet = new Set([1, 2, 2, 3]); // Set {1, 2, 3} - 适合去重场景:如过滤用户 ID 列表、提取唯一标签等
- 注意:Set 不支持直接索引访问(
mySet[0]是undefined),需转回数组再操作
Set → 数组(还原为可索引结构)
两种主流方式,效果一致,按习惯选其一即可:
- 展开运算符:
const arr = [...mySet]; -
Array.from():const arr = Array.from(mySet);
两者都按插入顺序生成数组,且不改变原 Set。若需映射处理(如转成字符串),可链式调用:[...mySet].map(String)。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
进阶:带条件的转换(例如只取满足某条件的元素)
Set 本身没有 filter 方法,但可以先转数组再筛选:
const filteredArr = [...mySet].filter(x => x > 5);- 如需保持结果为 Set,再包一层:
new Set([...mySet].filter(x => x % 2 === 0))
避免在循环中反复增删 Set 元素来模拟过滤,效率低且易出错。
注意事项与常见误区
转换看似简单,但几个细节容易踩坑:
- 对象/数组等引用类型在 Set 中是按引用比较的,
new Set([[1], [1]])长度为 2,不会去重 -
Set不会深比较,也不处理 NaN 的特殊相等性(NaN === NaN为 false,但 Set 中多个 NaN 只存一个) - 空 Set 转数组得空数组:
[...new Set()] → [],安全,无需额外判断
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










