Hi all I have the following code
the data that I want to transform.
JavaScript
x
40
40
1
const obj = {
2
3
numbers: {
4
label: "main numbers",
5
pageTitle: "Numbers",
6
key: "1",
7
items: {
8
firstNumber: {
9
label: "first number",
10
pageTitle: "first",
11
key: "first"
12
},
13
secondNumber: {
14
label: "second number",
15
pageTitle: "second",
16
key: "second"
17
}
18
}
19
},
20
21
letters: {
22
label: "main Letters",
23
pageTitle: "Letters",
24
key: "2",
25
items: {
26
firstLetter: {
27
label: "first Letter",
28
pageTitle: "first",
29
key: "first"
30
}
31
}
32
},
33
34
signs: {
35
label: "main sign",
36
pageTitle: "Sign",
37
key: "3"
38
}
39
};
40
In my obj
variable I have 3 other objects
numbers
object which has items
property which includes 2 other objects.
letters
object which has items
property which includes only one object.
signs
object.
I need to transform my obj
to the following way.
JavaScript
1
23
23
1
[
2
{
3
label:"main numbers",
4
pageTitle:"Numbers",
5
key:1,
6
children: [{label,pageTitle,key},{label,pageTitle,key}]
7
},
8
{
9
label:"main Letters",
10
pageTitle:"Letters",
11
key:1,
12
children: [{label,pageTitle,key}]
13
},
14
{
15
label:"main sign",
16
pageTitle:"Sign",
17
key:1,
18
children: []
19
},
20
21
22
]
23
for that transformation, I wrote the following code.
JavaScript
1
18
18
1
const transformedData = Object.values(obj).map((menuitem) => menuitem);
2
3
const data = [];
4
5
transformedData?.map((x) => {
6
const newData = {};
7
newData.label = x.label;
8
newData.pageTitle = x.pageTitle;
9
newData.key = x.key;
10
newData.children = x?.Object?.values(items)?.map((el) => {
11
newData.children.label = el.label;
12
newData.children.pageTitle = el.pageTitle;
13
newData.children.key = el.key;
14
});
15
data.push(newData);
16
});
17
18
Everything was working, but for children
instead of printing an array it prints undefined
.
Please help me to resolve this issue.
Advertisement
Answer
I created a function for your case.
JavaScript
1
11
11
1
const convert = data =>
2
Object.values(data)?.map(x => ({
3
label: x.label,
4
pageTitle :x.pageTitle ,
5
key: x.pathname,
6
children: x.items
7
? Object.values(x.items || {}).map(el => ({ label: el.label,
8
key:el.pathname,pageTitle:el.pageTitle }))
9
: null,
10
}));
11
You can use like const items = convert(obj)
.