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

JavaScript扩展运算符合并对象问题:如何实现深层合并覆盖?

如何实现嵌套对象的合并与覆盖?

现有两个嵌套对象:

obj1

{
   myObj: {
      key1: "value1",
      key2: "value2"
   }
}

obj2

{
   myObj: {
      key2: "new_value2",
      key3: "value3"
   }
}

尝试用扩展运算符合并:

let combined = {...obj1, ...obj2};

预期结果:

{
   myObj: {
      key1: "value1",
      key2: "new_value2",
      key3: "value3"
   }
}

实际结果:obj1的myObj被完全覆盖

{
   myObj: {
      key2: "new_value2",
      key3: "value3"
   }
}

1. 手动嵌套解构合并

要是嵌套层级固定、层数不多,直接针对嵌套的子对象单独合并就行:

let combined = {
  ...obj1,
  myObj: {
    ...obj1.myObj,
    ...obj2.myObj
  }
};

这种方式直观,适合简单场景,能精准控制每一层的合并逻辑。

2. 递归合并函数

如果对象嵌套层级不固定,或者需要通用的合并工具,可以写个递归函数处理:

function mergeNestedObjects(target, source) {
  const result = {...target};
  for (const key in source) {
    // 遇到嵌套对象就递归合并,普通值直接覆盖
    if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
      result[key] = mergeNestedObjects(result[key] || {}, source[key]);
    } else {
      result[key] = source[key];
    }
  }
  return result;
}

const combined = mergeNestedObjects(obj1, obj2);

这个函数会遍历每一层,遇到嵌套对象就继续合并,不会直接覆盖整个子对象,同时能保证原对象不被修改。

3. ES2024原生Object.merge(注意兼容性)

ES2024新增了Object.merge,原生支持深层合并,用法很简单:

const combined = Object.merge({}, obj1, obj2);

不过要注意,这个方法目前属于较新特性,部分旧环境可能不支持,使用前先确认目标环境的兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:18:50