首页 > Web开发 > 详细

js数组及对象的深拷贝

时间:2014-01-24 18:50:31      阅读:495      评论:0      收藏:0      [点我收藏+]

为了解除引用关系复制对象或者数组,如果是浅层的数组或对象(也就是数组中不包含对象或数组),可以通过slice或者concat方法直接实现。

var arr1 = [1, 2, 3];
var arr2 = arr1.slice(0);
arr1[0] = 0;
console.log(arr1);
console.log(arr2);
var arr3 = [1, 2, 3];
var arr4 = arr3.concat();
arr3[0] = 0;
console.log(arr3);
console.log(arr4);

 

也可以通过自己的方法实现,就是遍历数组或对象,返回新数组或者对象。

bubuko.com,布布扣
var simpleCopy = function(o){
    if (o instanceof Array) {
        var n = [];
        for (var i = 0; i < o.length; ++i) {
            n[i] = o[i];
        }
        return n;
    } else if (o instanceof Object) {
        var n = {}
        for (var i in o) {
            n[i] = o[i];
        }
        return n;
    }
}
bubuko.com,布布扣

 

那么如何实现拷贝包含对象或者数组的这种情况呢?那么就通过递归拷贝来实现。

bubuko.com,布布扣
var deepCopy = function(o) {
    if (o instanceof Array) {
        var n = [];
        for (var i = 0; i < o.length; ++i) {
            n[i] = deepCopy(o[i]);
        }
        return n;

    } else if (o instanceof Object) {
        var n = {}
        for (var i in o) {
            n[i] = deepCopy(o[i]);
        }
        return n;
    } else {
        return o;
    }
}
bubuko.com,布布扣

 

注意:代码中我用instanceof来判断类型,一定要把o instanceof Array 放在 o instanceof Object上面,因为如果是数组的话,instanceof Object也返回true。

如此即可。

js数组及对象的深拷贝

原文:http://www.cnblogs.com/racyily/p/3532176.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!