JS中数组对象的深浅拷贝

浅拷贝

赋值操作完成的是引用的创建。

深拷贝

数组的深拷贝

对于数组的深拷贝常规的有三种方法:

方法一:遍历赋值

var arr = ["a", "b"], 
	arrCopy = [];
for (var item in arr) {
	arrCopy[item] = arr[item];
}
arrCopy[1] = "c";
arr   // => ["a", "b"]
arrCopy   // => ["a", "c"]

考虑伪多维数组可以写成函数形式:

function arrDeepCopy(source){
    var sourceCopy = [];
    for (var item in source) {
    	sourceCopy[item] = 
    		typeof source[item] === 'object' ? 
    		arrDeepCopy(source[item]) : source[item];
    }
    return sourceCopy;
}
arrDeepCopy(obj);

这种方法简单粗暴,但是利用JS本身的函数我们可以更加便捷地实现这个操作。

方法二:数组方法
slice(index):从index开始截取数组生成一个新数组。
concat():合并空内容后生成一个新数组。

对象的深拷贝

纯对象
方法一:遍历赋值

var objDeepCopy = function(source){
    var sourceCopy = {};
    for (var item in source) {
    	sourceCopy[item] = source[item];
    }
    return sourceCopy;
}

方法二:使用对象展开运算符

var objTarget = { ...objOrigin }

嵌套对象
方法:

var objDeepCopy = function(source){
    var sourceCopy = {};
    for (var item in source) {
    	sourceCopy[item] = 
    	typeof source[item] === 'object' ? objDeepCopy(source[item]) : source[item];
    }
    return sourceCopy;
}
var objCopy = objDeepCopy(obj);

对象数组的混合
方法:

var objDeepCopy = function (source) {
    var sourceCopy = source instanceof Array ? [] : {};
    for (var item in source) {
        sourceCopy[item] = 
        	typeof source[item] === 'object' ? objDeepCopy(source[item]) : source[item];
    }
    return sourceCopy;
}
var objCopy = objDeepCopy(obj);

注:Object.assign()只能实现局部深拷贝,即第一层的拷贝。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值