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

如何高效移除对象数组重复项并转换为指定对象结构?

对象数组去重及结构转换方案

一、最优去重方案

针对你这种每个数组元素都是单个UUID键值对的对象数组,最优去重方式是利用Map(或普通对象)记录已出现的UUID,遍历一次数组就能完成去重,时间复杂度O(n),效率拉满。

示例代码:

// 假设原数组为originalArray
const uniqueArray = [];
const seenIds = new Map();

originalArray.forEach(item => {
  // 取出当前对象的唯一UUID键
  const uuid = Object.keys(item)[0];
  if (!seenIds.has(uuid)) {
    seenIds.set(uuid, true);
    uniqueArray.push(item);
  }
});

// uniqueArray就是去重后的目标数组
console.log(uniqueArray);

要是你的环境支持ES6+语法,也能写得更简洁:

const seenIds = new Map();
const uniqueArray = originalArray.filter(item => {
  const uuid = Object.keys(item)[0];
  return seenIds.has(uuid) ? false : seenIds.set(uuid, true);
});

二、转换为目标对象结构

完全可以直接转换!去重后的数组能通过Object.assign或扩展运算符快速合并成单一对象,不用额外手动遍历。

示例代码:

// 基于已去重的uniqueArray
const targetObject = Object.assign({}, ...uniqueArray);

// 或者用ES8对象扩展写法
const targetObject = { ...uniqueArray.reduce((acc, curr) => ({ ...acc, ...curr }), {}) };

console.log(targetObject);

这样得到的targetObject就是你想要的结构:一个包含所有UUID键的大对象,每个键对应原嵌套对象。

如果想一步完成去重+转换,效率会更高(少一次遍历):

const targetObject = {};

originalArray.forEach(item => {
  const uuid = Object.keys(item)[0];
  // 重复的UUID会被自动覆盖(保留首次出现的)
  if (!targetObject[uuid]) {
    targetObject[uuid] = item[uuid];
  }
});

这个方法省去了中间数组的存储,直接生成目标结构,性能最优。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:45:59