
本文介绍如何从键值对对象(每个值为数字数组)中提取所有 ID 并自动去除重复项,使用 Object.values()、Array.prototype.concat() 和 Set 一行高效实现去重合并。
本文介绍如何从键值对对象(每个值为数字数组)中提取所有 id 并自动去除重复项,使用 `object.values()`、`array.prototype.concat()` 和 `set` 一行高效实现去重合并。
在 JavaScript 开发中,常遇到类似结构的数据:一个对象,其属性值均为数字数组(如表示不同分组下的 ID 列表),而我们需要将所有 ID 合并为一个无重复的扁平数组。例如:
const testobj = {
"100": [295, 681, 15220],
"257": [295, 681, 1123]
};
目标是得到唯一 ID 数组:[295, 681, 15220, 1123](顺序不严格要求,但通常保留首次出现顺序)。
核心思路三步走:
- 提取所有数组:用 Object.values(testobj) 获取所有值(即 [ [295, 681, 15220], [295, 681, 1123] ]);
- 扁平化合并:利用 [].concat(...arrOfArrays) 展开嵌套结构,得到 [295, 681, 15220, 295, 681, 1123];
- 去重并转回数组:通过 new Set() 自动去重(Set 保证元素唯一且保留插入顺序),再用扩展运算符 [...set] 转为普通数组。
✅ 完整代码如下:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
const testobj = {"100": [295, 681, 15220], "257": [295, 681, 1123]};
const uniqueIds = [...new Set([].concat(...Object.values(testobj)))];
console.log(uniqueIds); // [295, 681, 15220, 1123]
注意事项:
- ✅ 顺序保障:Set 在现代 JS 中按插入顺序迭代,因此结果数组保持各 ID 首次出现的顺序;
- ⚠️ 类型安全:本方案适用于纯数字 ID;若含字符串 ID(如 "id_1"),同样有效;但混合类型(如 295 与 "295")会被视为不同值(因 Set 基于 === 比较);
- ? 替代写法(ES2019+):也可用 flat() 替代 concat:
const uniqueIds = [...new Set(Object.values(testobj).flat())];
更简洁,但需注意 flat() 兼容性(IE 不支持,Node.js ≥12);
- ? 扩展场景:如需按特定字段去重(如对象数组中的 id 属性),则需先 map 提取再 filter + findIndex,此处不适用。
掌握这一组合模式(Object.values → flat/concat → Set → 扩展运算符),可高效处理绝大多数“多源数组合并去重”需求。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










