Object.assign的拷贝实际为浅拷贝,当对象为多层对象时,会有拷贝失败的情况,所以根据deepCopy函数的原理写了一个deepAssign函数
const deepAssign = (targetObj, otherObj) => {
for (const key in otherObj) {
if (Object.prototype.hasOwnProperty.call(targetObj, key)) {
if (otherObj[key] !== null) {
if (typeof otherObj[key] === 'object') {
targetObj[key] = deepAssign(targetObj[key], otherObj[key])
} else {
targetObj[key] = otherObj[key]
}
}
}
}
return targetObj
}
const deepCopy = (obj) => {
const result = Array.isArray(obj) ? [] : {}
for (const key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
if (typeof obj[key] === 'object' && obj[key] !== null) {
result[key] = deepCopy(obj[key])
} else {
result[key] = obj[key]
}
}
}
return result
}