I got this nested arrays and I need to loop through it to create nested containers. lvl4 should go inside lvl3, lvl3 to lvl2 and lvl2 inside lvl1.
const elements = [
{ name: 'a-lvl1', innerEl: [
{ name: 'a1-lvl2', innerEl: [
{ name: 'a1-lvl3' , innerEl: [
{ name: 'a-lvl4', innerEl: [] }
] },
{ name: 'a2-lvl3' , innerEl: [
{ name: 'a-lvl4', innerEl: [] }
] }
] },
{ name: 'a2-lvl2', innerEl: [
{ name: 'a-lvl3' , innerEl: [
{ name: 'a-lvl4', innerEl: [] }
] }
] },
{ name: 'a3-lvl2', innerEl: [
{ name: 'a-lvl3' , innerEl: [
{ name: 'a-lvl4', innerEl: [] }
] }
] },
] },
{ name: 'b-lvl1', innerEl: [ { }] },
{ name: 'c-lvl1', innerEl: [ { }] }
]
This is the current script, which is working but I'm looking for a much simpler solution.
let renderElements = null;
if( elements !== undefined || elements.length != 0 ) {
renderElements = elements.map( lvl1 => {
let lvl2Blocks = null;
if( lvl1.innerEl !== undefined || lvl1.innerEl.length != 0) {
lvl2Blocks = lvl1.innerEl.map( lvl2 => {
let lvl3Blocks = null;
if( lvl2.innerEl !== undefined || lvl2.innerEl.length != 0) {
lvl3Blocks = lvl2.innerEl.map( lvl3 => {
let lvl4Blocks = null;
lvl4Blocks = lvl3.innerEl.map( lvl4 => {
return (
<div name={lvl4.name} selected={null} >
{ lvl4.innerEl !== undefined && lvl4Blocks }
</div>
)
});
return (
<div name={lvl3.name} selected={null} >
{ lvl3.innerEl !== undefined && lvl4Blocks }
</div>
)
});
}
return (
<div name={lvl2.name} selected={null} >
{ lvl2.innerEl !== undefined && lvl3Blocks }
</div>
)
});
}
return (
<div name={lvl1.name} selected={null} >
{ lvl1.innerEl !== undefined && lvl2Blocks }
</div>
)
});
}
Any ideas? Thanks.