set是业务变量预处理中哈希去重最轻量高效的方式,时间复杂度o(1),天然去重、内存清晰、语义明确;支持原始类型直接去重,对象数组可结合set按字段去重,脏值需预过滤再处理。

在业务变量预处理阶段,用 Set 做哈希去重是最轻量、最高效的方式之一——它时间复杂度为 O(1) 的查找和插入,远优于数组遍历或 filter + indexOf 的 O(n²) 方案。
为什么选 Set 而不是 Array 或 Object?
Set 天然保证元素唯一,自动忽略重复值;内存占用比用对象模拟哈希表({key: true})更清晰;且支持直接展开、迭代、转换,语义明确、不易出错。
- 避免手写
includes循环判断,减少嵌套和边界错误 - 不依赖 JSON.stringify 对象去重(Set 本身不深比较,需预处理结构)
- 比 Lodash 的
uniq更轻量,无额外依赖
基础字符串/数字去重模板
适用于用户 ID、订单号、标签列表等原始类型变量清洗:
```js const rawIds = ['U001', 'U002', 'U001', 'U003', 'U002']; const uniqueIds = [...new Set(rawIds)]; // ['U001', 'U002', 'U003'] ```一行搞定,保留首次出现顺序,无需排序干扰业务逻辑。
对象数组按字段去重(如按 user_id 去重)
实际业务中常需对对象数组“逻辑去重”,此时不能直接用 Set,但可结合 Map 或辅助 Set 实现高效哈希判重:
const seen = new Set(); const uniqueByUserId = userList.filter(item => { if (seen.has(item.user_id)) return false; seen.add(item.user_id); return true; }); // 结果保留第一个 U001 对应的完整对象 ```
兼容 null / undefined / 空字符串的健壮处理
真实数据常含脏值,建议预过滤再进 Set:
```js const rawValues = ['a', '', null, 'b', undefined, 'a', ' ']; const cleanValues = rawValues .map(v => (v === null || v === undefined) ? '' : String(v).trim()) .filter(v => v !== ''); // 剔除空串 const uniqueClean = [...new Set(cleanValues)]; // ['a', 'b'] ```这样既防报错,又符合业务中“空值不参与去重、也不保留在结果里”的常见需求。










