I am having trouble finding a way to iterate through this nested JSON data. I would like to display elements into select option list.
I store my data in a state after a request.
const [filterData, setFilterData] = useState([]);
useEffect(() => {
ScenarioService.getFilterData().then((res) => {
setFilterData(res.data);
console.log(res.data);
});
setIsData(true);
}, []);
{
"groups":[
"group1",
"group2"
],
"regions":[
"region1",
"region2"
]
}
I already tried:
<select>
{Object.keys(filterData).map((key) => {
return filterData[key].map((value) => {
return <option>{key[value]}</option>;
});
})}
</select>
<select>
{Object.keys(filterData["regions"]).map((keyName, i) => {
return (
<option key={filterData[keyName]}>{filterData[keyName]}</option>
);
})}
</select>
{filterData.regions.map((value)=>{
return <option>{value}</option>
})}
Last one gives my TypeError: Cannot read property 'map' of undefined.
If i try to set my state to setFilterData(res.data.regions) then i can call map() and it works, but then my state is only regions.

filterData.groups.map(...), where...is a simple function to wrap the text in an<option>. (Similar to the ones you already have.) Similar for the second one, just usingregionsinstead ofgroups.filterDatastarts off, before the request resolves, as an empty array - and it needs to have those 2 properties. Try replacingconst [filterData, setFilterData] = useState([]);withconst [filterData, setFilterData] = useState({ groups: [], regions: [] });