直接用扩展运算符...包裹Set再放入方括号可得一维数组,因Set原生支持Symbol.iterator遍历,按插入顺序展开并自动去重,如new Set([1,2,3,2,1])转为[1,2,3]。

直接用扩展运算符 ... 包裹 Set,再放入方括号中即可得到一维数组。
基本写法
Set 是可迭代对象,扩展运算符能将其内部元素逐个展开:
const mySet = new Set([1, 2, 3, 2, 1]); // 自动去重:{1, 2, 3}
const arr = [...mySet]; // [1, 2, 3]
为什么能直接用?
因为 Set 实现了 Symbol.iterator 方法,原生支持遍历。扩展运算符会调用这个迭代器,按插入顺序依次取出值(注意:不是按数值大小排序)。
- Set 中重复元素只保留一个,转换后数组天然去重
- 顺序与插入顺序一致,例如
new Set(['b', 'a'])展开为['b', 'a'] - 支持任意类型元素(数字、字符串、对象引用等),但对象本身不会被深拷贝
其他等效方式(供参考)
虽然扩展运算符最简洁,但以下方法也能达到相同效果:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
Array.from(mySet)—— 显式转换,语义清晰 -
Array.from(mySet, x => x * 2)—— 可在转换时映射处理 -
[...mySet].map(x => x.toString())—— 先转数组再操作
注意事项
扩展运算符只做一层展开,对 Set 内部嵌套的数组或 Set 不递归处理:
const nestedSet = new Set([[1, 2], [3, 4]]); const flatArr = [...nestedSet]; // [[1, 2], [3, 4]] —— 还是二维
如需真正扁平化,需额外使用 flat() 或递归逻辑。

















