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

使用Lodash实现两数组合并(含对应键值覆盖逻辑)

没问题,这事儿用Lodash处理起来很顺手,我给你拆解下步骤和实现代码:

解决思路

咱们的核心需求是让arr2里的单键对象覆盖arr1中对应键的对象值。首先得把两个数组转换成键值对格式的对象(方便Lodash做合并覆盖),之后再把合并后的对象转回你需要的单键对象数组格式。

具体实现代码

// 导入Lodash(浏览器环境可直接用全局变量_)
const _ = require('lodash');

const arr1 = [ { "key1": "Value1" }, { "key2": "Value2" }, { "key3": "Test3" }, { "key4": "Test4" }, { "key5": "Test5" }, { "key6": "Test6" }, { "key7": "Test7" } ];
const arr2 = [ { "key3": "Value3-changed" }, { "key6": "Value6-changed" } ];

// 1. 把数组转成统一的键值对象
const objFromArr1 = _.assign({}, ...arr1);
const objFromArr2 = _.assign({}, ...arr2);

// 2. 合并对象,arr2的键会自动覆盖arr1的对应键
const mergedObj = _.assign({}, objFromArr1, objFromArr2);

// 3. 把合并后的对象转回单键对象数组
const resultArr = Object.entries(mergedObj).map(([key, value]) => ({ [key]: value }));

console.log(resultArr);
// 输出就是你要的预期结果:
// [ { "key1": "Value1" }, { "key2": "Value2" }, { "key3": "Value3-changed" }, { "key4": "Test4" }, { "key5": "Test5" }, { "key6": "Value6-changed" }, { "key7": "Test7" } ]

代码细节说明

  • _.assign({}, ...arr1):把数组里的每个单键对象展开合并成一个大对象,Lodash的这个方法比原生Object.assign兼容性更好,处理边缘场景更稳妥。
  • _.assign({}, objFromArr1, objFromArr2):合并两个对象时,后面的objFromArr2会优先覆盖前面objFromArr1里的相同键值,完美匹配咱们的覆盖需求。
  • Object.entries(mergedObj).map(...):把键值对对象还原成你需要的单键对象数组格式,保证输出结构和输入一致。

如果想更简洁,也可以用Lodash的链式调用一步搞定:

const resultArr = _.chain(arr1)
  .assign({}, ...arr2)
  .entries()
  .map(([k, v]) => ({ [k]: v }))
  .value();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:28:05