实现深拷贝的几种方法
1.利用递归来实现每一层都重新创建对象并赋值
function deepClone(obj){
let objClone = Array.isArray(obj) ? [] : {};
if(obj && typeof obj === 'object'){
for(key in obj){
if(obj.hasOwnProperty(key)){
//判断obj子元素是否是对象,如果是,递归复制
obj[key] = deepClone(obj[key]);
}else{
//如果不是,简单复制
objClone[key] = obj[key];
}
}
}
return objClone;
}
2.利用JSON的 parse 和 stringify(兼容ie8+)
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。let object1 = {
name: 'xiao',
friens: {
name: ['john','kk','jd']
}
};
temp = JSON.stringify(object1 );
let cloneObj = JSON.parse(temp);
// cloneObj 是 object1 的深拷贝
3.借用JQ的extend方法 详解
let object1 = {
apple: 0,
banana: { weight: 52, price: 100 },
cherry: 97
};
let cloneObj = $.extend( true, {},object1);
// cloneObj 是 object1 的深拷贝
参考:
https://www.cnblogs.com/ginowang42/archive/2013/04/11/3014419.html
https://zhuanlan.zhihu.com/p/26282765
http://www.cnblogs.com/tracylin/p/5346314.html
http://lijundong.com/deep-clone-vs-shallow-clone/

更多精彩