{c:{b:{d:1}}}和{c:{b:{f:2}}}这样的两个对象怎么合并?

{c:{b:{d:1}}}和{c:{b:{f:2}}}这样的两个对象怎么合并,用普通的{...{c:{b:{d:1}}}, ...{c:{b:{f:2}}}}这种方法只能得到{c:{b:{f:2}}}而不是{c:{b:{d:1, f:2}}}(本人是个前端小白,最好用js回答一哈)

var d1 = {c:{b:{d:1}}};
var d2 = {c:{b:{f:2}}};
function fp(a,b) {
	for (var n in b) {
		if (n in a) {
			fp(a[n],b[n]);
		} else {
			a[n] = b[n];
		}
	}
}
fp(d1,d2);
console.log(d1);

 

简单的实现一个merge,详细的可以去网上找

function isObject (obj) {
	return Object.prototype.toString.call(obj) === '[object Object]'
}
function merge (target, ...arg) {
	arg.forEach(obj => {
		Object.keys(obj).forEach(key => {
			const srcVal = obj[key]
			if (isObject(srcVal) && isObject(target[key])) {
				target[key] = merge(target[key], srcVal)
			} else {
				target[key] = srcVal
			}
		})
	})
	return target
}

 

方法:

mergeRecursive(obj1, obj2) {
    for (var p in obj2) {
        try {
          
            if (obj2[p].constructor == Object) {
                obj1[p] = mergeRecursive(obj1[p], obj2[p]);
            } else {
                obj1[p] = obj2[p];
            }
        } catch (e) {
            obj1[p] = obj2[p];
        }
    }
    return obj1;
},

Object.assign(obj1,obj2)和console.log({...{c:{b:{d:1}}},...{c:{b:{f:2}}}})了解一下...展开运算符

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,欢迎您加入CSDN!

目前问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632