使用JSON.parse(JSON.stringify())方式来进行深拷贝
let arr = [1,2,3,4,[5,6,7]]
let obj = {
name:'张三',
age:20,
children:{
name:'李四'
}
}
let copyArr = JSON.parse(JSON.stringify(arr))
let copyObj = JSON.parse(JSON.stringify(obj))
console.log(copyArr)
console.log(copyObj)
如果对象或者数组里有undefined或者是函数类型的数据,使用JSON.parse(JSON.stringify())这种方法的话就不能把这两种类型的数据拷贝过来,我们可以通过递归的方式来进行我们的深拷贝操作
function deepCopy(obj){
// 判断传入的数据是数组还是对象
let newObj = Array.isArray(obj) ? [] :{}
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
// 如果是数组或者是对象类型
if(typeof obj[key] === 'object'){
newObj[key] = deepCopy(obj[key])
}else{
// 如果是基本数据类型
newObj[key] = obj[key]
}
}
}
return newObj
}
let arr = [1,2,3,4,[5,6,7]]
let obj = {
name:'张三',
age:20,
fn(){
console.log('fn')
},
sex:undefined,
children:{
name:'李四'
}
}
let copyArr = deepCopy(arr)
let copyObj = deepCopy(obj)