题解 | #深拷贝#
深拷贝
https://www.nowcoder.com/practice/70ca77b52d424ced8ebb348cd77c1dc5
const _completeDeepClone = (obj, visited = new WeakMap()) => {
// 补全代码
// 处理基本类型
if (obj === null || typeof obj !== 'object') {
return obj;
}
// 处理循环引用
if (visited.has(obj)) {
return visited.get(obj);
}
// 处理日期类型
if (obj instanceof Date) {
return new Date(obj);
}
// 处理正则表达式类型
if (obj instanceof RegExp) {
return new RegExp(obj);
}
// 处理函数类型
if (typeof obj === 'function') {
return obj;
}
// 处理数组类型
if (Array.isArray(obj)) {
const copyArray = [];
visited.set(obj, copyArray);
for (let i = 0; i < obj.length; i++) {
copyArray[i] = _completeDeepClone(obj[i], visited);
}
return copyArray;
}
// 处理普通对象类型
const copyObj = {};
visited.set(obj, copyObj);
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
copyObj[key] = _completeDeepClone(obj[key], visited);
}
}
return copyObj;
}