You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
838 B
TypeScript

// 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);