深浅拷贝封装

  1. 浅拷贝(只复制第一层)

    浅拷贝有两种方法,一种是object.assign

  2. 深拷贝

简单的做法:JSON.parse(JSON.stringfy(obj)) 但是该方法也是有局限性的:
会忽略undefined
会忽略symbol
会忽略函数
不能解决循环引用的对象 (会报错)

对象、数组、
注意考虑:伪多维数组、数组对象

function arrDeepCopy(source){
if(source instanceof Array){
var copy=[];
for(var item in source){
copy=typeof source[item]==='Object'? arrDeepCopy(source[item]):source[item];

}
return copy;
}
else if(source instanceof Object){
var copy={};
for(var item in source){
copy=typeof source[item]==='Object'? arrDeepCopy(source[item]):source[item];
}
return copy;
}

}

今天偶尔看到了另一种简洁以及考虑更全面的写法,我用了es6实现,上面的部分当时图省事用的es5语法,如何转es6就不转了,相信看到这篇博客的人应该不会再这方面有问题:


let DeepCopy=(origin,target)=>{
	target=target||{}
	for(let prop in origin){
		if(origin.hasOwnProperty(prop)){//是原型链上的
			if(typeof(origin[prop])==='Object'&&origin[prop]){//是对象注意typeof(null)返回object
				//先判断是不是数组
				if(origin[prop] instanceof Array){
					target[prop]=[];
					DeepCopy(origin[prop],target[prop])
				}else{
					target[prop]={}
					DeepCopy(origin[prop],target[prop])
				}
			}
			else{
				target[prop]=origin[prop]
			}

		}
	}
	return target;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值