ES6 Set 处理不重复用户 ID 时性能优异,add/has 操作平均 O(1),自动去重、支持高效遍历与动态维护;建议 ID 用原始类型存储,避免频繁转数组。

ES6 Set 在处理不重复用户 ID 集合时,性能表现非常出色,尤其适合高频增删查场景。
插入和查找接近 O(1) 时间复杂度
Set 底层通常基于哈希表实现,对原始类型(如数字、字符串形式的用户 ID)的 add 和 has 操作平均时间复杂度为 O(1)。这意味着无论集合已有 100 条还是 10 万条用户 ID,判断某个 ID 是否已存在、或添加新 ID,耗时基本稳定。
- 例如:
userSet.has('u_789')不需要遍历整个集合,而是通过哈希快速定位 - 对比数组:
arr.includes('u_789')是 O(n),数据量大时明显变慢
自动去重,省去手动校验逻辑
每次调用 add 时,Set 自动用严格相等(===)判断是否已存在——对字符串 ID 或数字 ID 来说,这完全符合业务预期,且无需额外写 if (!arr.includes(id)) arr.push(id) 这类低效判断。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 即使批量导入用户 ID 数组:
new Set(['u_1', 'u_2', 'u_1']),初始化即完成去重 - 注意:若 ID 是对象(如
{id: 'u_1'}),则按引用比较,相同结构不同实例仍会被视为两个元素
内存与操作开销合理,适合中大型集合
Set 的内存占用略高于纯数组(因需维护哈希结构),但在现代浏览器和 Node.js 环境中,管理数万级用户 ID(如实时在线用户池、黑名单 ID 列表)毫无压力。
-
size 属性可即时获取当前唯一 ID 总数,无需
new Set(arr).size重新计算 - delete 和 clear 操作也保持高效,适合动态维护活跃用户状态
- 支持
for...of、forEach、扩展运算符([...userSet])等标准遍历方式,开发体验流畅
实际使用小提醒
为保障最佳性能,建议:
- 用户 ID 统一用字符串或数字原始类型存储,避免混用对象包装
- 避免频繁将 Set 转成数组再操作(如
[...set].filter(...)),必要时直接用 Set 方法链式处理 - 大量初始化时,优先传入可迭代源:
new Set(idArray),比循环调用add更快


















