上次面试的时候叫我手写一个递归完成深拷贝,当时不会,现在复习一下。
let obj = {
id: 1,
name: 'zs',
msg: {
age: 18
},
color: ['blue', 'red', 'green']
}
let o = {}
const deepCopy = (newobj, oldobj) => {
for (let k in oldobj) {
let item = oldobj[k]
// 1.如果item是数组
if (item instanceof Array) {
newobj[k] = []
// 重复
// for(let j in item){
// newobj[k][j]=item[j]
// }
deepCopy(newobj[k], item)
} else if (item instanceof Object) {
// 2.如果item是对象
newobj[k] = {}
deepCopy(newobj[k], item)
} else {
// 3.都不是,则是简单数据类型
newobj[k] = item
}
}
}
// 注意:数组要放在最前面判断,数组也属于对象。简单放最后,因为最终递归到最后一层都是简单数据类型
deepCopy(o, obj)
o.msg.age = 20
console.log(o, obj, '深度拷贝')