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

如何在JavaScript(NodeJS)中合并多个嵌套对象?

嵌套对象合并解决方案

你用Object.assign(obj1, obj2)得不到预期结果,是因为它属于浅合并——当遇到嵌套对象时,会直接用后面对象的属性覆盖前面的,而不会递归合并内部属性。比如这里obj2.db会直接替换obj1.db,而不是把两个db里的属性合并到一起。

下面给你几种可行的实现方式:

1. 手动嵌套合并(适合结构简单的场景)

如果你的对象结构固定且不复杂,可以直接用扩展运算符(...)逐个合并嵌套层级:

const mergedObj = {
  db: {
    ...obj1.db,
    ...obj2.db
  },
  token: obj3.token
};

这种方式直观,不需要额外函数,适合明确知道对象结构的情况。

2. 通用深合并函数(适合复杂/动态结构)

如果需要处理任意层级的嵌套对象,写一个递归的深合并函数更通用:

function deepMerge(...objects) {
  return objects.reduce((result, current) => {
    // 遍历当前对象的所有属性
    for (const key in current) {
      if (current.hasOwnProperty(key)) {
        const currentVal = current[key];
        const resultVal = result[key];
        // 如果当前属性是对象(且不是数组、null),递归合并
        if (typeof currentVal === 'object' && currentVal !== null && !Array.isArray(currentVal)) {
          result[key] = deepMerge(resultVal || {}, currentVal);
        } else {
          // 非对象属性直接赋值
          result[key] = currentVal;
        }
      }
    }
    return result;
  }, {});
}

// 使用方式:传入所有要合并的对象
const mergedObj = deepMerge(obj1, obj2, obj3);

这个函数会递归遍历每个对象的属性,遇到嵌套对象就继续合并,最终得到完全合并后的结果。

3. 第三方工具库(可选)

如果你的项目已经引入了工具库(比如Lodash),可以直接用现成的深合并方法,比如Lodash的_.merge:

const mergedObj = _.merge(obj1, obj2, obj3);

这种方式不需要自己写函数,适合已经用了工具库的项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:05:22