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

如何使用Lodash实现两个对象的选择性合并、更新与忽略操作

解决方案

Lodash没有开箱即用的专属函数可以直接匹配你的需求,但可以使用_.mergeWith搭配自定义规则配置实现,完全满足你不硬编码逻辑、灵活扩展的要求。

实现思路

将不同属性的合并策略抽为独立配置对象,后续新增属性仅需更新配置,无需修改合并核心逻辑:

  1. 配置中指定需要忽略更新、数组取并集的特殊属性
  2. 未在配置中声明的属性默认走覆盖逻辑,和_.assign行为一致

代码示例

// 你的原始对象
var server = {
  'title': 'string',
  'systems': [3,4,5],
  'views': 1000,
  'authors': ['fred','bill']
};

var update = {
  'title': 'new string',
  'systems': [5],
  'views': 900,
  'authors': ['fred','jim']
};

// 合并策略配置,后续新增属性仅需修改此处
const mergeRules = {
  views: 'ignore', // 忽略该属性的更新
  authors: 'union' // 该属性数组取并集
}

// 传给_.mergeWith的自定义合并函数
function mergeCustomizer(objValue, srcValue, key) {
  const currentRule = mergeRules[key]
  if (currentRule === 'ignore') {
    return objValue // 忽略更新返回原值
  }
  if (currentRule === 'union') {
    return _.union(objValue, srcValue) // 数组取并集
  }
  // 无匹配规则时返回undefined,_.mergeWith会走默认覆盖逻辑
}

// 执行合并
const result = _.mergeWith({}, server, update, mergeCustomizer)

执行后得到的result和你预期的输出完全一致:

{
  title: 'new string',
  systems: [5],
  views: 1000,
  authors: ['fred','bill','jim']
}

扩展说明

如果后续需要新增其他合并策略(比如数值累加、数组合并去重外的其他处理),仅需在mergeRules中新增规则标识,同时在mergeCustomizer中补充对应逻辑即可,无需调整现有业务代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 23:57:02