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

使用Lodash合并对象时,如何替换同键的数组值?

问题描述

我有两个存在部分相同键但值不同的对象:

const object1 = { 
  name: 'John',
  age: 23,
  books: ['book1', 'book2']
};

const object2 = { 
  name: 'John',
  age: 23,
  books: ['book3'],
  city: 'London'
};

期望得到的输出是:

const object3 = { 
  name: 'John',
  age: 23,
  books: ['book3'],
  city: 'London'
};

但使用Lodash的_.merge方法执行以下代码时:

object3 = _.merge(object1 , object2);

得到的结果却是数组被合并而非替换:

const object3 = { 
  name: 'John',
  age: 23,
  books: ['book1','book2','book3'],
  city: 'London'
};

请问如何让books数组被object2中的新数据替换?

解决方案

方法1:使用浅合并直接覆盖

_.merge的特性是递归合并数组元素,若需要直接用后面对象的属性覆盖前面的,可采用浅合并方案:

  • 原生扩展运算符:
const object3 = { ...object1, ...object2 };
  • 原生Object.assign:
const object3 = Object.assign({}, object1, object2);
  • Lodash的_.assign:
const object3 = _.assign({}, object1, object2);

以上方法都会直接用object2的books数组覆盖object1的对应属性,不会合并数组元素。

方法2:自定义深层合并逻辑

如果需要保留_.merge对深层对象的合并能力,但遇到数组时直接替换,可使用_.mergeWith自定义合并规则:

const object3 = _.mergeWith({}, object1, object2, (objValue, srcValue) => {
  // 当源值为数组时,直接返回源值完成替换
  if (Array.isArray(srcValue)) {
    return srcValue;
  }
});

这种方式兼顾了深层对象合并和数组替换的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:46:14