JS深度复制deepCopy
来源:互联网 发布:删除主键sql 编辑:程序博客网 时间:2024/06/09 19:46
在JS里,除Array和Object之外的数据类型的复制可以直接通过等号=来实现,但Array和Object类型的数据通过等号只是起引用作用,指向的是同一块内存地址。当源数据改变,引用的数据也同时会发生变化。因此若要复制这两类数据类型就必须对它们里边的每一个元素都逐个进行复制,可以通过迭代实现。
let util = ( ()=> { // 获取数据类型 let getType=(obj)=> { let type = Object.prototype.toString.call(obj); return /object\s(.*)]/.exec(type)[1]; }; let isType=(obj, type)=>{ obj = getType(obj).toLowerCase(); return obj === type; }; return { isType: isType }})();// 将obj对象传入,return一个复制后的对象出来let deepCopy = (obj1) => { // 若不是对象类型或是null类型,直接输出 if (typeof obj1 !== 'object' || obj1 === null) { return obj1 } let i; // 根据目标是Array类型还是object来设置目标参数的类型 let target = util.isType(obj1, 'array') ? [] : {}; for (i in obj1) { // 判断当前复制的对象是否为对象类型数据 if (typeof obj1[i] === 'object') { deepCopy(obj1[i]); } target[i] = obj1[i] } return target};let a1={a:1};let b1=deepCopy(a1);console.log(b1); //{ a: 1 }a1.a=2;console.log(deepCopy(a1)); //{ a: 2 }console.log(b1); //{ a: 1 }
可以看出,当源数据发生变化时,深度复制后的数据不会随之改变。
当然也可以用简单点的方法。
let deep=(sourceObj)=>{return JSON.parse(JSON.stringify(sourceObj))}
阅读全文
0 0
- JS深度复制deepCopy
- Js 深度复制数组
- JS 实现对象深度复制
- js 深度copy 深复制
- js深度复制代码实现
- deepcopy
- deepCopy
- DeepCopy
- [NET]深度拷贝的实现(DeepCopy)
- js实现引用对象的深度复制
- python 浅复制、深复制(copy/deepcopy)
- 深度复制
- 深度复制
- 深度复制
- JS学习30:对象简单、深度克隆(复制、Clone)
- js--引用类型Array--3.数组简单复制和深度复制
- DataTable复制数据,深度复制
- 对象深度复制
- doc2unix的安装及使用
- Mybatis中@Param解释
- JavaScript 错误处理和堆栈追踪浅析
- List<Map<String,Object>> 的快速排序
- PHP:2147483647与int型
- JS深度复制deepCopy
- 三维表面重建robust algorithm for surface reconstruction from 3D point cloud
- Socket详解
- 判断正整数m是否为完全数(如果一个正整数m的所有小于m的因子(包括1)加起来正好等于m本身,那么这个数就称为完全数)
- Java设计模式-原型模式
- 集成邮件发送功能MFMailComposeViewController
- 【第五届“图灵杯”NEUQ-ACM程序设计大赛】A C D【哈夫曼树】E【手写链表】 F G H【圆周排列生成】 I
- 灰度直方图和H-S二维直方图
- 美图秀秀-拼图效果,UIView的clipsTobounds (后续的回头再加)