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

使用Lodash 3.10合并两个对象数组,merge方法无效求解决方案

解决Lodash 3.10合并对象数组(按name去重)的问题

嘿,我完全懂你的困扰——你要合并两个都是{name, value}结构的对象数组,而且希望后面对象里的同名项覆盖前面的,但Lodash的merge方法在这里确实派不上用场,因为它是针对单个对象的深度合并,不是处理数组里的对象去重合并的。

下面给你两种在Lodash 3.10里完全可行的方案,都是简单高效的:

方案一:用concat + keyBy + values组合(最简洁)

这个方法利用Lodash的工具函数链式组合,一步到位:

const arr1 = [ { "name": "DESIGEMPRESA", "value": "CMIP" }, { "name": "DSP_DIRECAO", "value": "CMIP@400@1900-01-01" }, { "name": "MES", "value": "12" } ];
const arr2 = [ { "name": "DESIGEMPRESA", "value": "CMIP" }, { name: "CUSTO", value: ">100" } ];

// 合并数组 → 按name转成对象(自动覆盖同名项)→ 转回数组
const mergedArray = _.values(_.keyBy(_.concat(arr1, arr2), 'name'));

console.log(mergedArray);

逻辑说明:

  1. _.concat(arr1, arr2):把两个数组合并成一个新数组,顺序是arr1在前、arr2在后
  2. _.keyBy(..., 'name'):将合并后的数组转成以name为键的对象,后面出现的同名对象会直接覆盖前面的
  3. _.values(...):把对象里的所有值提取出来,重新变成数组,就是你要的最终结果

方案二:用reduce手动处理(更灵活)

如果你需要更自定义的逻辑,比如修改合并规则,可以用reduce来实现:

const arr1 = [ { "name": "DESIGEMPRESA", "value": "CMIP" }, { "name": "DSP_DIRECAO", "value": "CMIP@400@1900-01-01" }, { "name": "MES", "value": "12" } ];
const arr2 = [ { "name": "DESIGEMPRESA", "value": "CMIP" }, { name: "CUSTO", value: ">100" } ];

// 先合并两个数组,再用reduce遍历构建去重后的对象
const mergedObj = _.reduce(_.concat(arr1, arr2), (acc, currentItem) => {
  // 用name作为唯一标识,把当前对象存入累加器,自动覆盖同名项
  acc[currentItem.name] = currentItem;
  return acc;
}, {});

// 把对象转成数组
const finalArray = _.values(mergedObj);

最终结果

两种方法得到的结果都是:

[
  { "name": "DESIGEMPRESA", "value": "CMIP" },
  { "name": "DSP_DIRECAO", "value": "CMIP@400@1900-01-01" },
  { "name": "MES", "value": "12" },
  { "name": "CUSTO", "value": ">100" }
]

这两种方法在Lodash 3.10版本里都是完全支持的,你可以根据自己的需求选择~

内容的提问来源于stack exchange,提问作者Leonel Matias Domingos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:31:10