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

如何用Lodash有条件合并两个配置对象?

用Lodash实现严格匹配默认结构的对象合并

直接上可用的代码实现:

const _ = require('lodash');

const defaultSetting = {
  level1: {
    setting1: "defaultValue1",
    nested: true,
    home: "africa"
  },
  level2: {
    setting2: "defaultValue3"
  }
};

const initialSetting = {
  level1: {
    setting1: "initialValue1",
    nested: false
  },
  level2: {
    nested: true
  }
};

// 核心合并逻辑
const mergedConfig = _.mergeWith({}, defaultSetting, initialSetting, (targetVal, sourceVal) => {
  // 仅当两者都是纯对象时,过滤掉源对象中目标对象没有的键
  if (_.isPlainObject(targetVal) && _.isPlainObject(sourceVal)) {
    return _.merge({}, targetVal, _.pick(sourceVal, Object.keys(targetVal)));
  }
});

console.log(mergedConfig);

逻辑说明

  • 借助_.mergeWith自定义合并规则,确保最终结构完全遵循defaultSetting的框架
  • 对每个层级的对象,通过_.pick(sourceVal, Object.keys(targetVal))筛选出initialSetting中与defaultSetting重合的属性,再合并到默认配置上
  • 非对象类型的属性直接用initialSetting的值覆盖defaultSetting
  • defaultSetting中未被initialSetting覆盖的属性会完整保留默认值
  • initialSetting中存在但defaultSetting没有的属性会被自动丢弃

运行后输出的结果完全符合你的期望:

{
  "level1": {
    "setting1": "initialValue1",
    "nested": false,
    "home": "africa"
  },
  "level2": {
    "setting2": "defaultValue3"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:55:09