1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| const obj = { name: "aaa", age: 18, friend: ["bbb", "ccc", "ddd"], bar: { count: 1, foo: { msg: "hello world", }, }, add(n1, n2) { return n1 + n2; }, }; obj.self = obj;
function isObject(obj) { return typeof obj === "object" && obj !== null; }
function deepCopy(target, map = new WeakMap()) { if (!isObject(target)) return target;
if (typeof target === "function") return target;
if (map.get(target)) return map.get(target);
let newTarget = Array.isArray(target) ? [] : {};
map.set(target, newTarget);
for (let key in target) { newTarget[key] = deepCopy(target[key], map); }
return newTarget; }
const deepTaeget = deepCopy(obj); console.log(deepTaeget);
|