标题
手写一个javascript深拷贝不香吗?!
背景
学过js的小伙伴都知道浅拷贝和深拷贝,
像简单的复制,Object.assin()(只有一层数据的时候),concat()等之类的都是浅拷贝,
深拷贝像JSON.parse(JSON.stringify())等之类的
但是在实际项目中,深拷贝的用到的次数非常多的,而JSON.stringify()有比较消耗性能(特别是在数据多的情况下),这个时候我们手写一个递归的深拷贝方法是有必要的
深拷贝–JSON.parse(JSON.stringify())
const person = [
{
name:"ssypp",
sex:"男",
job:"前端开发"
},
{
name:"ssypw",
sex:"男",
job:"前端开发"
}
]
let temp = JSON.parse(JSON.stringify(person))
深拷贝–手写一个递归拷贝
- 1.需要两个对象,一个是目标对象,一个是源对象
- 2.需要多类型进行判断
function deepCopy(target,resouce){
//获取源对象的属性值 k
for(var k in resouce){
//获取键值
let item = resouce[key];
//对键值的类型进行判断
//如果是Array类型
if(item instanceof Array){
//创建一个对应键的空数组的值
target[key] = [];
deepCopy(target[key],item);
}else if(item instanceof Object){
//object类型
target[key] = {};
deepCopy(target[key],item);
}else{
//基本数据类型
target[key] = item
}
}
}
const person2 = {}
deepCopy(person2,person1)
总结
动手自己写写更容易掌握!!