const deepClone = (origin, hasMap = new WeakMap()) => {
if (origin == undefined || typeof origin !== "object") {
return origin;
}
if (origin instanceof Date) {
return new Date(origin);
}
if (origin instanceof RegExp) {
return new RegExp(origin);
}
const hasKey = hasMap.get(origin);
if (hasKey) {
return hasKey;
}
let target = new origin.constructor();
hasMap.set(origin, target);
for (let key in origin) {
if (origin.hasOwnProperty(key)) {
target[key] = deepClone(origin[key], hasMap);
}
}
return target;
};