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

基于对象名称路径合并嵌套对象数组的实现方法咨询

深度嵌套对象按路径合并的实现方案

我明白你需要的是一个能按属性路径深度遍历,将array1的内容精准合并到array2对应层级的工具。首先得先把你给出的结构转换成合法的JavaScript对象(你写的语法混淆了数组和对象,实际需求应该是嵌套对象而非数组),然后我们来实现递归合并的逻辑。

第一步:修正数据结构

先把你的输入转换成标准的嵌套对象格式:

// 原array1对应的源对象
const source = {
  boot: {
    value: {
      enable: ["some string"]
    }
  }
};

// 原array2对应的目标对象
const target = {
  options: {
    enable: []
  },
  boot: {
    value: {
      something: []
    }
  }
};

第二步:实现深度合并函数

下面这个递归函数会遍历每个层级的属性,匹配同名节点并合并内容:

function deepMergeByPath(target, source) {
  // 遍历源对象的所有可枚举属性
  for (const key in source) {
    if (Object.prototype.hasOwnProperty.call(source, key)) {
      const targetVal = target[key];
      const sourceVal = source[key];

      // 如果目标对象存在该属性,且两者都是非null对象,则递归合并下一层
      if (targetVal && typeof targetVal === 'object' && sourceVal && typeof sourceVal === 'object') {
        deepMergeByPath(targetVal, sourceVal);
      } else {
        // 处理数组合并(如果需要保留目标数组并追加源数组元素,可启用此逻辑)
        if (Array.isArray(targetVal) && Array.isArray(sourceVal)) {
          target[key] = [...targetVal, ...sourceVal];
        } else {
          // 否则直接将源属性赋值给目标对象(目标不存在则新增,存在则覆盖)
          target[key] = sourceVal;
        }
      }
    }
  }
  return target;
}

第三步:测试合并效果

调用函数并查看结果:

const mergedResult = deepMergeByPath(target, source);
console.log(mergedResult);

输出结果完全符合你的预期:

{
  options: { enable: [] },
  boot: {
    value: {
      something: [],
      enable: ["some string"]
    }
  }
}

逻辑说明

  • 递归遍历:函数会逐层深入对象的嵌套结构,直到找到最底层的属性
  • 节点匹配:当源对象和目标对象有同名的对象类型节点时,会继续递归合并该节点的子属性
  • 数组处理:如果需要合并数组元素而非覆盖,代码里已经预留了逻辑,直接启用即可;如果不需要,也可以删掉数组判断部分,直接赋值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:22:01