You need to enable JavaScript to run this app. JavaScript中new Set()的两种写法哪种更优?
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中new Set()的两种写法哪种更优?

JavaScript 中两类 Set 用法的合理性辨析

先把最核心的误区点透

你贴的两段示例,根本不是对等的两种“数组去重写法”,二者返回的内容从类型上就完全不一样:

  • 第一种写法new Set([...array])最后返回的是Set实例对象,压根不是数组。写这段代码的人大概率是把转数组的步骤忘在脑后了,以为这样就能拿到去重后的数组,实际上后面不管是想给返回值push新元素,还是调用map处理数据,都会直接报方法不存在的错。
  • 第二种写法[...new Set(array)]最后返回的是实打实的去重普通数组,这也是前端圈通用了很多年的标准去重写法。

到底哪种写法更合理

第一种写法从根上就站不住脚

不管你是要拿Set做高频存在性判断,还是要靠它实现数组去重,这个写法都没有合理性:

  • 如果你的目标是拿到去重后的可用数组,那它根本没完成“把Set转回数组”的关键步骤,属于写了一半的半成品,完全没法投入使用。
  • 如果你目标就是生成Set结构本身,那这个写法属于纯冗余操作:Set构造函数本来就支持接收可迭代对象当入参,原数组本身就是可迭代结构,多此一举写个[...array]把原数组展开成临时数组再传进去,平白多了一次全量数组的内存拷贝,没有任何功能收益。

第二种写法是当前场景下的最优解

如果你的目标就是用Set给数组去重、拿到可正常操作的数组结果,这个写法没有任何可挑的问题:

  • 整条执行链路没有多余操作:先把原数组直接丢给Set完成去重,再把生成的Set展开成普通数组,全程没有生成不必要的临时变量,性能表现更好。
  • 写法简洁符合社区共识,别人一看就知道是在做数组去重,代码可读性更高。

新手最容易踩的坑就是搞混Set构造函数的入参逻辑:很多人以为必须把数组展开了才能传给Set,实际上哪怕你传字符串、NodeList、类数组这种可迭代结构,Set都能正常处理,根本不需要提前展开。

内容的提问来源于stack exchange,提问作者Nektariosx01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.03 23:54:03