使用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
相关产品推荐
相关产品推荐

