I am trying to generate a menu and a sub menu in ReactJs. The data comes from an external api in JSON format.
Here's the JSON data:
[
{
"content": "A",
"Subtypes": [
{
"content": "1"
},
{
"content": "2"
},
{
"content": "3"
}
]
},
{
"content": "B",
"Subtypes": [
{
"content": "10"
},
{
"content": "20"
},
{
"content": "30"
},
{
"content": "40"
}
]
},
{
"content": "C",
"Subtypes": [
{
"content": "X"
},
{
"content": "Y"
},
{
"content": "Z"
}
]
}
]
I would like to generate two arrays from the above JSON data, similar to the ones below:
Array1 = ["A","B","C"]
Array2 = {
A: ["1", "2", "3"],
B: ["10", "20", "30", "40"],
C: ["X", "Y", "Z"]
};
How can I achieve that ? Thanks.
CodePudding user response:
I'm not sure if this is what you need because you mentioned two arrays and the array2 in your example is an object
const firstArray = [],
secondArray = [];
json.forEach(({
content,
Subtypes
}) => {
firstArray.push(content);
secondArray.push(Subtypes.map(({
content
}) => content));
});
if you meant an object for the second array, you can update it to
secondArray[content] = Subtypes.map(({content}) => content);
CodePudding user response:
below code give the output you desired,var ff is the array
ff.reduce((accm, cv, cidx, arr) => {
accm.array1.push(cv.content);
accm.array2[cv.content] = cv.Subtypes.map(t => t.content);
return accm;
}, { array1: [], array2: {} });
CodePudding user response:
This is an example code written in typescript that gives the above-mentioned output.
let s = [
{
"content": "A",
"Subtypes": [
{
"content": "1"
},
{
"content": "2"
},
{
"content": "3"
}
]
},
{
"content": "B",
"Subtypes": [
{
"content": "10"
},
{
"content": "20"
},
{
"content": "30"
},
{
"content": "40"
}
]
},
{
"content": "C",
"Subtypes": [
{
"content": "X"
},
{
"content": "Y"
},
{
"content": "Z"
}
]
}
]
type subType = {
[k: string]: any
}
let contentList: string[] = []
let obj: subType = {};
s.forEach((c) => {
contentList.push(c.content);
obj[c.content] = [];
c.Subtypes.forEach((e) => {
obj[c.content].push(e.content);
});
})
console.log(obj)
console.log(contentList)
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>
CodePudding user response:
const obj = {}
const data = [
{
"content": "A",
"Subtypes": [
{
"content": "1"
},
{
"content": "2"
},
{
"content": "3"
}
]
},
{
"content": "B",
"Subtypes": [
{
"content": "10"
},
{
"content": "20"
},
{
"content": "30"
},
{
"content": "40"
}
]
},
{
"content": "C",
"Subtypes": [
{
"content": "X"
},
{
"content": "Y"
},
{
"content": "Z"
}
]
}
]
data.map(el => {
obj[el.content] = el.Subtypes.map(e => e.content)
});
console.log(obj)
console.log(Object.keys(obj))
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>