From 89a0abcbaf469aa0cbd067f45d664a40544cd472 Mon Sep 17 00:00:00 2001 From: Vasily Guzov Date: Sat, 19 Oct 2024 22:09:29 +0300 Subject: [PATCH] [basic] deepClone --- lib/deepCloneObj.ts | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 lib/deepCloneObj.ts diff --git a/lib/deepCloneObj.ts b/lib/deepCloneObj.ts new file mode 100644 index 0000000..e935b52 --- /dev/null +++ b/lib/deepCloneObj.ts @@ -0,0 +1,40 @@ +// JSON.parse(JSON.stringify(obj)) +// structuredClone(obj) +// _.cloneDeep(obj); + +const obj = { + name: "Vasily", + addres: { + citi: "Saint", + street: "Vilnizki", + }, +}; + +const obj2 = Object.assign({}, obj); +const obj3 = structuredClone(obj); + +// console.log("shallow: ", obj.addres === obj2.addres); +// console.log("deepclone: ", obj.addres === obj3.addres); +// +// recursive implementation cloneDeep + +function deepClone(value: any) { + if (typeof value !== "object" || value === null) { + return value; + } + + if (Array.isArray(value)) { + return value.map((item) => deepClone(item)); + } + + const objEntries = Object.entries(value).map(([key, value]) => [ + key, + deepClone(value), + ]); + + return Object.fromEntries(objEntries); +} + +const obj4 = deepClone(obj); + +console.log("deepclone(): ", obj.addres === obj4.addres);