-
Notifications
You must be signed in to change notification settings - Fork 0
/
6-deep_clone.js
47 lines (42 loc) · 1.24 KB
/
6-deep_clone.js
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
const child = {
name: 'Ash',
age: 5,
};
const parent = {
name: 'John',
age: 30,
bio: 'I like turtles',
child, // shorthand nested object
};
// // shallow clone
// const parentCloneShallow = { ...parent };
// child.name = 'Maya';
// console.log(parentCloneShallow.child.name); // Maya, not Ash anymore
// console.log(child.name); // Maya
child.name = 'Ash'; // reset
// this works if you know the exact properties to clone
const specificParentClone = { ...parent, child: { ...parent.child } };
child.name = 'Xio';
console.log(specificParentClone.child.name); // Ash
console.log(child.name); // Xio
// node 17+ adds a deep clone method
child.name = 'Ash'; // reset
const deepCloneNew = structuredClone(parent);
child.name = 'Ana';
console.log(deepCloneNew.child.name); // Ash
console.log(child.name); // Ana
// generic deep clone
child.name = 'Ash'; // reset
const deepCloneClassic = JSON.parse(JSON.stringify(parent));
child.name = 'Travis';
console.log(deepCloneClassic.child.name); // Ash
console.log(child.name); // Travis
// keys are quoted, all double quotes
// values are quoted if they are strings
// no trailing commas, comments, functions,
// any key pointing to undefined gets dropped
{
"name": "John",
"age": 30,
"likesTurtles": true
}