You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将对象数组合并为含唯一对象的数组或单一对象?

嘿,我来帮你搞定这个数组对象处理的问题!针对你提到的两种需求——得到唯一对象数组,或是把多个对象合并成单一对象,我给你整理了几种实用的方案,附上代码示例,你可以根据自己的场景选:

一、得到包含唯一对象的数组

通常我们会根据对象的某个唯一标识(比如id、uuid这类不会重复的属性)来判断对象是否重复,以下是几种高效的实现方式:

方法1:使用Map去重(推荐,性能最优)

利用Map的键唯一性特性,遍历数组时把对象的唯一标识作为键、对象本身作为值存入Map,最后把Map的取值转成数组即可。时间复杂度是O(n),处理大数据组也很高效:

const originalArray = [
  { id: 1, name: "Alice" },
  { id: 2, name: "Bob" },
  { id: 1, name: "Alice" }, // 重复项
  { id: 3, name: "Charlie" }
];

const uniqueArray = Array.from(
  new Map(originalArray.map(item => [item.id, item])).values()
);

console.log(uniqueArray);
// 输出: [{id:1, name:'Alice'}, {id:2, name:'Bob'}, {id:3, name:'Charlie'}]

如果需要用其他属性判断重复(比如name),只要把item.id换成item.name就行。

方法2:使用reduce累加去重

这个方法逻辑更直观,适合简单场景。通过reduce遍历数组,每次检查累加器里是否已经存在当前对象的唯一标识,不存在就加入累加器:

const uniqueArray = originalArray.reduce((acc, current) => {
  const isDuplicate = acc.some(item => item.id === current.id);
  if (!isDuplicate) acc.push(current);
  return acc;
}, []);

注意这个方法的时间复杂度是O(n²),数组元素很多时性能不如Map方案。


二、将数组中的多个对象合并为单一对象

这里分两种常见场景,你可以按需选择:

场景1:合并所有对象的键值对(重复key会被覆盖)

如果数组里的对象键不重复,或者希望后面的对象覆盖前面的相同key,用Object.assign或者扩展运算符就能快速实现:

const arrayToMerge = [
  { id: 1, name: "Alice" },
  { age: 25, city: "New York" },
  { job: "Engineer" }
];

// 方法1: Object.assign
const mergedObject = Object.assign({}, ...arrayToMerge);

// 方法2: 扩展运算符
const mergedObject = { ...arrayToMerge[0], ...arrayToMerge[1], ...arrayToMerge[2] };

console.log(mergedObject);
// 输出: {id:1, name:'Alice', age:25, city:'New York', job:'Engineer'}

如果有重复key(比如两个对象都有name),后出现的对象的key值会覆盖前面的。

场景2:转成以指定属性为键的字典对象

这种场景常用于快速查找,比如把对象的id作为键,整个对象作为值,生成一个字典:

const originalArray = [
  { id: 1, name: "Alice" },
  { id: 2, name: "Bob" },
  { id: 3, name: "Charlie" }
];

const objectDict = originalArray.reduce((acc, current) => {
  acc[current.id] = current;
  return acc;
}, {});

console.log(objectDict);
// 输出: {
//   1: {id:1, name:'Alice'},
//   2: {id:2, name:'Bob'},
//   3: {id:3, name:'Charlie'}
// }

之后你就可以通过objectDict[1]直接拿到对应id的对象,比遍历数组查找高效得多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:54:01