手写递归深拷贝

let obj = {
job: {
address: 'shenzhen',
salary: '20k'
},
name: 'zhang',
age: 22

}
// 第一种(函数和正则不可以)
// let obj1 = JSON.parse(JSON.stringify(obj))
// obj.name = 'mm'
// console.log(obj1);
// console.log(obj);

// 第二种递归拷贝
function deepCopy (obj) {
let copyObj = Array.isArray(obj) ? [] : {}
Object.keys(obj).forEach(key => {
if (obj.hasOwnProperty(key)) {
if (obj[key] instanceof Object) {
copyObj[key] = deepCopy(obj[key])
} else {
copyObj[key] = obj[key]
}
}
})
// for (var key in obj) {
// if (obj.hasOwnProperty(key)) {
// if (typeof obj[key] === 'object') {
// copyObj[key] = deepCopy(obj[key])
// } else {
// copyObj[key] = obj[key]
// }
// }
// }
return copyObj
}

let obj2 = deepCopy(obj)
obj.name = 'yangyang'
obj.job.address = 'shanghai'
console.log(obj2);
console.log(obj);

posted @ 2022-04-24 22:22  小白张先生  阅读(138)  评论(0)    收藏  举报