function shallwCopy(obj) {
if (typeof obj !== 'object') return obj
let newObj = obj instanceof Array ? [] : {}
for (let key in obj) {
if (obj.hasOwnProperty(key)) newObj[key] = obj[key];
}
return newObj;
};
function deepCopy(obj) {
if (typeof obj !== 'object') return obj
let newObj = obj instanceof Array ? [] : {}
for (let key in obj) {
if (obj.hasOwnProperty(key)) newObj[key] = deepCopy(obj[key]);
}
return newObj;
};
function deepCopy2(obj, weakMap = new WeakMap()) {
if (obj === null) return obj;
if (obj instanceof Date) return new Date(obj);
if (obj instanceof RegExp) return new RegExp(obj);
if (typeof obj !== "object") return obj;
if (weakMap.get(obj)) return weakMap.get(obj);
let newObj = new obj.constructor();
weakMap.set(obj, newObj);
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = deepCopy2(obj[key], weakMap);
}
}
return newObj;
}