基于对象名称路径合并嵌套对象数组的实现方法咨询
深度嵌套对象按路径合并的实现方案
我明白你需要的是一个能按属性路径深度遍历,将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
相关产品推荐
相关产品推荐

