首页 > 代码库 > 递归 深拷贝
递归 深拷贝
// 递归深拷贝! function clone(Obj) { var newObj; if (Obj instanceof Array) { newObj = []; // 创建一个空的数组 var i = Obj.length; while (i--) { newObj[i] = clone(Obj[i]); } return newObj; } else if (Obj instanceof Object){ newObj = {}; // 创建一个空对象 for (var k in Obj) { // 为这个对象添加新的属性 newObj[k] = clone(Obj[k]); } return newObj; }else{ return Obj; } }
当你想复制一个对象或者一个数组时,如何做到互不影响,而且可以做到深拷贝呢,我们先来说说深拷贝和浅拷贝吧
首先深拷贝和浅拷贝只针对像 Object, Array 这样的复杂对象的。简单来说,浅拷贝只复制一层对象的属性,而深复制则递归复制了所有层级。
var obj = { a:1, arr: [9,10] }; var reObj = Copy(obj); function Copy(src) { var dst = {}; for (var prop in src) { if (src.hasOwnProperty(prop)) { dst[prop] = src[prop]; } } return dst; }
上面是一个简单的浅复制实现,因为浅复制只会将对象的各个属性进行依次复制,并不会进行递归复制,而 JavaScript 存储对象都是存地址的,所以浅复制会导致 obj.arr 和 reObj.arr 指向同一块内存地址。
再来看看刚开篇时的代码,首先确定类型,然后确定递归的回调,最终到达对象或者数组的末端,达到深拷贝的要求。
递归 深拷贝
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。