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

使用Lodash mergeWith自定义合并器未获预期输出的问题

解决Lodash合并时单对象独有的required数组置空问题

现有需求:合并两个模板对象时,required数组在两个对象都存在时取交集,仅在单个对象中存在时置为空数组,其他键值对保留差异。原代码仅实现了交集逻辑,未处理单对象存在required的场景,需要调整自定义合并器。

修改后的完整代码

function customizer(objValue, srcValue, key) {
  if (key === 'required') {
    // 两个对象都有required数组,取交集
    if (_.isArray(objValue) && _.isArray(srcValue)) {
      return _.intersection(objValue, srcValue);
    }
    // 仅单个对象有required(或其中一个不是数组),返回空数组
    return [];
  }
  // 非required字段,交给Lodash默认逻辑合并
}

var a = { 
  'a': {
    'required': [1,2,3]
  }, 
  'b': {
    'required': [1,3]
  },
  'c': {
    'd': {
      'e': {
        'f': {
          'required': [4,5]
        }
      }
    }
  }
}

var b = { 
  'a': {
    'required': [1,2]
  }, 
  'b': {
    'required': [1,2,3]
  }
}

let c = {}
console.log(_.mergeWith(c, a, b, customizer));

运行结果(符合期望)

{ 
  'a': { 
    'required': [1,2] 
  }, 
  'b': { 
    'required': [1,3] 
  }, 
  c: { 
    d: { 
      e: { 
        f: { 
          'required': [] 
        } 
      } 
    } 
  } 
}

逻辑说明

  • 当处理required键时,优先判断两个值是否都是数组:是则返回交集结果
  • 只要其中一个值不存在、或不是数组,直接返回空数组
  • 非required的键,返回undefined让Lodash沿用默认合并逻辑,保留差异键值对

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:05:12