两个多层嵌套对象怎么用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结构缺失的情况,请问改如何处理?


郎朗坤
浏览 1342回答 1
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?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5