I have some attributes from a nested object that is inside the parent object but I would like to merge nested object with the parent object to be flatten.
Original object:
JavaScript
x
9
1
enrollment = {
2
user: {
3
id: 'string',
4
name: 'string'
5
},
6
finished: 'boolean',
7
path: 'string'
8
}
9
expected flatten object:
JavaScript
1
7
1
user: {
2
id: 'string',
3
name: 'string',
4
finished: 'boolean',
5
path: 'string'
6
}
7
Advertisement
Answer
You can recursively build object any number of nested objects. So, this function is not your case dependent:
JavaScript
1
43
43
1
var enrollment = {
2
user: {
3
id: 'string',
4
name: 'string'
5
},
6
finished: 'boolean',
7
path: 'boolean'
8
}
9
10
var enrollment2 = {
11
user: {
12
id: 'string',
13
name: 'string'
14
},
15
test: {
16
test1: {
17
test2: {
18
val0:'val0',
19
test4: { //3rd level nested object for example
20
val1: 'val1',
21
val2: 'val2'
22
}
23
}
24
}
25
},
26
finished: 'boolean',
27
path: 'boolean'
28
}
29
30
const flat = (obj, out) => {
31
Object.keys(obj).forEach(key => {
32
if (typeof obj[key] == 'object') {
33
out = flat(obj[key], out) //recursively call for nesteds
34
} else {
35
out[key] = obj[key] //direct assign for values
36
}
37
38
})
39
return out
40
}
41
42
console.log(flat(enrollment, {}))
43
console.log(flat(enrollment2, {}))