Set是什么:前端人一看就懂

Set是什么?一句话:JavaScript 里的“唯一值集合”。它不像数组那样靠下标管理元素,而是专门处理去重、存在性判断、集合运算这类问题。理解它后,你会少写很多笨重循环。

Set是什么:先抓住一个核心

Set 是 ES6 引入的数据结构,用来存放不重复的值。你可以把它想成一个只收“唯一会员”的名单:同一个值加两次,名单里也只出现一次。

它的常用方法很少:add 添加,delete 删除,has 判断是否存在,clear 清空,size 看数量。语法不难,真正要理解的是它的使用边界:它解决的是“集合问题”,不是“列表问题”。

它和数组哪里不一样

数组关心位置:第 0 项、第 1 项、最后一项。Set 不关心下标,它关心某个值在不在集合里。数组可以有重复值,Set 天生去重。

比如用户选中的标签ID,用数组也能存,但你要自己防重复;用 Set,add 同一个ID多次也不会膨胀。相反,如果是评论列表,重复内容也可能是真实数据,就不该用 Set。

想要完整资源?

会员专享,海量内容

立即查看 →

Set怎么判断“重复”

基本类型按值判断:数字、字符串、布尔值都很好理解。NaN 在 Set 里也会被当成同一个值,这比早期一些 NaN 比较逻辑省心。

对象比较要注意:Set 看的是引用。两个内容一样的对象,只要不是同一个引用,就会被认为不同。所以 [{id:1},{id:1}] 用 Set 不会自动按 id 去重。对象去重通常要配合 Map 或手写 key。

它最适合的三种场景

第一,数组去重:const unique = [...new Set(list)],适合基本类型数组。第二,高频查找:把白名单、黑名单、权限码转成 Set,用 has 判断。第三,临时状态集合:比如表格里选中的行ID。

还有集合运算,比如交集、并集、差集。前端做筛选器时很实用:A类标签命中的商品ID一个 Set,B类标签命中的商品ID一个 Set,取交集就能得到同时满足条件的商品。

回到问题:Set到底该怎么记

别把 Set 记成“数组增强版”,这会误导你。更准确的记法是:Set 是一张唯一值名单,擅长判断存在和消灭重复。

当你的需求里出现“不能重复”“有没有”“选中了哪些”“过滤掉哪些”这些词,脑子里可以亮一下 Set;如果需求强调顺序、下标、重复记录,那数组更合适。

常见问题

Set是什么数据类型?
Set 是 JavaScript 的内置集合类型,属于对象类型,用来存储唯一值。
Set可以存对象吗?
可以存,但对象按引用去重,不按内容去重。两个内容一样的对象通常会被当成不同元素。
Set有长度吗?
Set 没有 length,用 size 获取元素数量,比如 mySet.size。

获取完整内容

加入会员,海量资源任你看

立即进入 →