码迷,mamicode.com
首页 > 其他好文 > 详细

对象合并_拷贝

时间:2019-12-05 23:56:43      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:tor   var   属性   对象   ret   深拷贝   const   type   object   

	function merae(obj1, obj2) {
		
	    for (var p in obj2) {
		   try {
		 
			 if ( obj2[p].constructor==Object ) {
				obj1[p] = merae(obj1[p], obj2[p]);
			 } else {
				obj1[p] = obj2[p];
			 }
		
		   } catch(e) {
			 //未设置目标对象中的属性;创建它并设置其值。
			 obj1[p] = obj2[p];
		   }
	    }
	
			
		var o1={
			a:1,
			b:{bb:2},
			c:{cc:3,ccc:4}
		};
		var o2={d:9,a:2};

		merae(o2,o1);
		//console.log(o2);//{a: 1,b: {bb: 2},c: {cc: 3, ccc: 4},d: 9}
		o1.a=5;
		//深拷贝不是浅拷贝
		//console.log(o2);//{a: 1,b: {bb: 2},c: {cc: 3, ccc: 4},d: 9}
		//console.log(o1);//{a:1,b:{bb:2},c:{cc:3,ccc:4}};
	function deepClone(source){
		let targetObj = source.constructor === Array ? [] : {}; 
			for(let keys in source){
				if(source.hasOwnProperty(keys)){
					if(source[keys] && typeof source[keys] === ‘object‘){
						
						targetObj[keys] = source[keys].constructor === Array ? [] : {};
						targetObj[keys] = deepClone(source[keys]);
						
					}else{
						
						targetObj[keys] = source[keys];
					}
				}
			}
		return targetObj;
	}
	
	
	var o1={
		a:1,
		b:{bb:2},
		c:{cc:3,ccc:4}
	};
	
	let o2=deepClone(o1);
	console.log(o2);
	o1.a=5;
	console.log(o2);//{a: 1, b: {…}, c: {…}}
	console.log(o1);//{a: 5, b: {…}, c: {…}}

对象合并_拷贝

标签:tor   var   属性   对象   ret   深拷贝   const   type   object   

原文地址:https://www.cnblogs.com/myniu/p/11992825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!