-
Notifications
You must be signed in to change notification settings - Fork 0
/
deepclone.js
52 lines (45 loc) · 983 Bytes
/
deepclone.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
48
49
50
51
const person = {
name: 'John Doe',
age: 30,
address: {
street: '123 Main St',
city: 'New York',
country: 'USA',
postalCode: '10001',
geoLocation: {
lat: 40.7128,
lon: -74.0060
}
},
hobbies: ['reading', 'traveling', 'coding'],
contactInfo: {
phone: {
home: '555-555-5555',
work: '555-555-1234',
},
email: 'john.doe@example.com'
}
};
function deepClone(obj) {
if (typeof obj === 'string') return obj;
if (typeof obj === 'number') return obj;
if (typeof obj === 'boolean') return obj;
if (Array.isArray(obj)) {
const res = obj.map((item) => deepClone(item));
return res;
}
if (typeof obj === 'object') {
let result = {};
let keys = Object.keys(obj);
for (let i=0;i<keys.length;i++) {
result = {
...result,
[keys[i]]: deepClone(obj[keys[i]])
}
}
return result;
}
}
let temp = deepClone(person);
// temp.name = "res";
console.log(temp);