两个多层嵌套对象怎么用JS合并?

// objA (原型对象,包含所有键值,要求合并后的对象和此对象结构一致)
objA = {
    a:'',
    b:[],
    c:{
        c1: '',
        c2: [],
        c3: {
            c31:'',
            c32:[],
            c33:{}
        }
    }
}
// objB包含objA的某些键值,比如
objB = {
    c:{
        c3:{
            c32:['apple']
        }
    }
}

要求objB中的值赋值给objA,并保留完整的objA的结构

// 例 合并后如下:
objC = {
    a:'',
    b:[],
    c:{
        c1: '',
        c2: [],
        c3: {
            c31:'',
            c32:['apple'],
            c33:{}
        }
    }
}

使用Object.assign()方法合并对象的话,会造成有些ObjB中没有的键值被合并掉,造成结构和ObjA结构缺失的情况,请问改如何处理?

阅读 7.8k
1 个回答
function MergeRecursive(obj1, obj2) {
  for (var p in obj2) {
    try {
      // Property in destination object set; update its value.
      if ( obj2[p].constructor==Object ) {
        obj1[p] = MergeRecursive(obj1[p], obj2[p]);
      } else {
        obj1[p] = obj2[p];
      }

    } catch(e) {
      // Property in destination object not set; create it and set its value.
      obj1[p] = obj2[p];
    }
  }

不想自己写直接搜了个,你还可以自定义下数组的操作,该函数是直接后者覆盖前者。

引自 How can I merge properties of two JavaScript objects dynamically?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题