对象合并_拷贝

	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: {…}}

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

时间: 2024-11-25 16:41:44

对象合并_拷贝的相关文章

C++ Primer笔记9_构造函数_拷贝构造(深拷贝与浅拷贝)

1.构造函数: >构造函数是一个特殊的.与类同名的成员函数,用于给每一个成员设置适当的初始值. >构造函数不能有返回值,函数名与类名同样. >缺省构造函数时,系统将自己主动调用该缺省构造函数初始化对象,缺省构造函数会将全部数据成员都初始化为零或       空.缺省构造函数是不带參数的构造函数. >创建一个对象时,系统自己主动调用构造函数. 构造函数的特点: 1.构造函数能够重载,传入什么实參决定调用不同版本号的构造函数. 2.构造函数不能声明为const .也不能声明为virtu

对象合并插件Lodash的merge方法使用

安装lodash的依赖: npm安装: cnpm i lodash -S yarn命令安装: yarn add lodash 然并卵: //lodash导入 import _ from 'lodash'; //在vue的js中使用const result = _.assign();//只能点出assign方法,不能点出merge方法,这个lodash插件里面根本没有merge方法 其实用assign方法效果也一样,只是对象的深浅拷贝的问题.    后面找到了这个:https://www.npmj

Oracle SQL语言DDL和对象管理_超越OCP精通Oracle视频教程培训27

Oracle SQL语言DDL和对象管理_超越OCP精通Oracle视频教程培训27 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第2/5套:Oracle SQL语言DDL和对象管理.主要学习Oracle数据库模式对象和表中可用的数据类型,表/临时表的创建与使用,索引/约束的创建与管理,视图/同义词/序列的创建和使用,触发器/存储过程/包的创建和使用. Oracle SQL语言DDL和对象管理,课程内容详细如下

禁止对象之间的拷贝

如何禁止对象之间的拷贝? 将构造函数和析构函数中的任意一个设置为private,如下: class A{ public: A(){}; private: ~A(){}; A(const A&a){}; A &operator=(const A&a){return a;} }; A a; 编译报错提示:Variable of type 'A' has private destructor. 我们知道,如果我们不显性的声明拷贝构造函数和重载=,那么编译器会为我们提供默认的拷贝构造函数和

jQuery对象合并、jQuery添加静态方法、jQuery添加DOM实例方法

实例效果: 代码演示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&q

[terry笔记]11gR2_DataGuard搭建_拷贝数据文件

11gR2搭建dataguard环境: 自己做的实验,后续按照rman模式搭建.主备切换.模式调整等实验会陆续发上来. primary: OS:oel 6.4 database:11.2.0.4.0 192.168.100.131 hostname=node4 ORACLE_SID=good ORACLE_HOME=/u01/product/11.2.0 db_unique_name=good standby: OS:oel 6.4 database:11.2.0.4.0 192.168.100

js通过一个方法实现对象的深浅拷贝。

众所周知,对象的深浅拷贝是工作中肯定会遇到的问题.所以,今天考虑写个小的功能来记录一下 //type:boolean,true-deep,true为深拷贝, function extendCopy(type,item){ if(typeof type != "boolean" || typeof item !='object'){ return } var newObj = item.constructor ==="Array" ?[]:{}; if(type){

asp.net对象合并

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 public class com     {         /// <summary>         /// 把参数转为JSON字符串         /// </summary>         /// <param nam

c#:如何处理对对象进行深度拷贝

1 /// <summary> 2 /// 对对象进行深度拷贝 3 /// </summary> 4 /// <param name="obj"></param> 5 /// <returns></returns> 6 private object Clone(object obj) 7 { 8 MemoryStream memory_stream = new MemoryStream(); 9 BinaryFor