最常用且推荐的方式是扩展运算符[...set]和Array.from(set);前者最简洁高效,后者兼容性好并支持映射处理,二者均保持Set插入顺序,不自动排序或去重。

<p>直接用扩展运算符 <strong>[...set]</strong> 或 <strong>Array.from(set)</strong> 就能转成数组,这是最常用也最推荐的两种方式。</p> <H3>用扩展运算符 [...set](最简洁)</H3> <p>这是目前最直观、性能较好且可读性最强的方法。Set 是可迭代对象,天然支持展开语法:</p> <ul> <li><font color="blue">const mySet = new Set([1, 2, 3]);</font></li> <li><font color="blue">const arr = [...mySet]; // [1, 2, 3]</font></li> <li>适用于所有现代浏览器和 Node.js 环境(ES6+)</li> <li>不能用于非可迭代的类 Set 对象,需确保是真正的 Set 实例</li> </ul> <H3>用 Array.from(set)(兼容性更好)</H3> <p>适合需要兼容较老环境(如 IE 不支持扩展运算符),或想在转换时顺便做映射处理:</p> <ul> <li><font color="blue">const arr = Array.from(mySet); // [1, 2, 3]</font></li> <li>支持第二个参数:类似 map 的回调,例如 <font color="blue">Array.from(mySet, x => x * 2)</font></li> <li>比扩展运算符稍冗长,但语义更明确,且对伪数组也适用</li> </ul> <H3>其他方法(不推荐日常使用)</H3> <p>比如 <font color="blue">Array.from(mySet.values())</font> 或遍历 <font color="blue">set.forEach()</font> 手动 push,逻辑绕路、代码更长,没必要:</p> <ul> <li><font color="blue">mySet.values()</font> 返回的是迭代器,不是数组,必须再套一层转换</li> <li>手动循环易出错,且无法保持 Set 的插入顺序优势(虽然 Set 本身有序,但多写几行没收益)</li> </ul> <H3>注意点:Set 转数组不会去重或排序</H3> <p>Set 本身已自动去重,转成的数组只保留原始插入顺序,不改变元素内容:</p> <ul> <li><font color="blue">new Set([3, 1, 2, 1])</font> → 数组是 <font color="blue">[3, 1, 2]</font>(不是 [1, 2, 3])</li> <li>如果需要排序,得额外调用 <font color="blue">.sort()</font>,例如 <font color="blue">[...mySet].sort((a,b) => a - b)</font></li> </ul>


















