首先深拷贝浅拷贝区别:
深拷贝:深拷贝是将要拷贝的数据拷贝下来,对已拷贝的数据进行操作修改 源数据不会改变
浅拷贝:浅拷贝是数据的直接赋值操作,对赋值变量进行操作修改 原始数据也会跟着改变
实现思路:
假设有原始数据 obj = {
name:'张三',
age:24,
children:{
son:{
name:'张小三',
age:3
},
daughter:{
name:'张小小',
age:1
}
},
address:['北京','上海','深圳']
}
首先创建一个函数并传入一个参数(要拷贝的原始数据)
根据传入参数创建控对象或者数组(输出需要)
对传入参数进行判断,只有当参数是对象形式并且参数不为null进入循环,否则直接赋值
在循环中调用函数本身并传入当前成员对创建的对象进行赋值
代码:
function copyDeep(data){
let copyObj = data instanceof Array? []:{}
if(typeof data === 'object' && data !== null){
for(let key in data){
copyObj[key] = copyDeep(data[key])
}
}else{
copyObj = data
}
return copyObj
}
let copy_obj = copyDeep(obj)
copy_obj.name = '李四'
copy_obj.children.son.name = '李son'
console.log(obj,copy_obj)
可以试着打印一下直接赋值的情况,看看有什么不一样的地方O0O