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

如何使用Lodash合并具有相同ID的JSON对象集合?

使用Lodash合并同ID的JSON对象

嘿,这个需求用Lodash来处理简直是量身定做!我来给你一步步讲清楚怎么把数组里同ID的对象合并成单个完整对象。

先理清楚需求核心

你手里的数组里分散着同一个ID的多个对象,每个对象只带了一部分属性,我们要把同一个ID的所有属性都整合到一个对象里,最终得到每个ID对应一个完整对象的集合。

第一步:修正原数据的语法问题

先提一句,你给出的原数组里有几个语法小问题(比如字符串没加引号、最后一个ID的笔误),我先修正成合法的JavaScript数组,方便后续处理:

const rawData = [
  { id: '1', count: 100 },
  { id: '2', count: 50 },
  { id: '3', count: 10 },
  { id: '1', type: 'A'},
  { id: '2', type: 'B' },
  { id: '3', type: 'C' },
  { id: '1', other: 'no' },
  { id: '2', other: 'no'},
  { id: '3', other: 'yes'},
  { input: 'key', output: 'screen', match: 'no', id: '1' },
  { input: 'key', output: 'screen', match: 'yes', id: '4' } // 修正了最后一个ID的笔误
];

方法一:分组+合并(直观易懂)

这个方法分两步走,先按ID分组,再把每组的对象合并,逻辑非常清晰:

const _ = require('lodash');

// 1. 按ID分组:把同ID的对象归到一起
const groupedById = _.groupBy(rawData, 'id');

// 2. 合并每组内的对象:把同一个ID的所有属性整合到一个对象里
const mergedObj = _.mapValues(groupedById, (group) => _.merge({}, ...group));

// 3. (可选)转成数组形式,和原数据结构对齐
const finalResult = Object.values(mergedObj);

console.log(finalResult);

代码解释:

  • _.groupBy(rawData, 'id'):会生成一个以ID为键、对应ID的对象数组为值的集合,比如{ '1': [{}, {}, ...], '2': [...] }。
  • _.merge({}, ...group):用扩展运算符把分组里的所有对象传给_.merge,它会递归地把所有属性合并到空对象里(用空对象做初始值是为了不修改原数据)。如果有重复属性,后面的对象属性会覆盖前面的(你的例子里没有重复属性,刚好完美整合)。
  • Object.values(mergedObj):把合并后的对象转换成数组,得到和原输入类似的数组结构。

方法二:用reduce一步到位(更简洁)

如果你不想生成中间的分组对象,可以用_.reduce直接遍历数组,逐个合并:

const _ = require('lodash');

const finalResult = _.reduce(rawData, (acc, currentItem) => {
  // 查找结果数组里是否已有当前ID的对象
  const existingItem = acc.find(item => item.id === currentItem.id);
  
  if (existingItem) {
    // 有的话就合并属性到已有对象
    _.merge(existingItem, currentItem);
  } else {
    // 没有的话就拷贝当前对象到结果数组(用cloneDeep避免修改原数据)
    acc.push(_.cloneDeep(currentItem));
  }
  
  return acc;
}, []);

console.log(finalResult);

注意事项

  • 如果你的数据里存在同ID对象有重复属性的情况(比如两个id='1'的对象都有count),_.merge会默认用后面的属性值覆盖前面的。如果需要特殊处理(比如累加count),可以在合并时单独判断属性名做自定义逻辑。
  • 确保你的Lodash版本支持这些方法(groupBy、mapValues、merge、reduce都是Lodash的基础方法,几乎所有版本都支持)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:23:07