//input [{},{},{},{isParent}, {}, {}, {isParent}, {}, {}]
//desired output [{}, {}, {}, [{}, {}, {}, [{}, {}, {}]]]
var nestInParent = elements => {
let ignoreIndexAfter = null;
return elements.reduce((acc, { component, isParent }, index) => {
if (isParent) {
let remaining = elements.slice(index + 1);
ignoreIndexAfter = index;
if (remaining.length > 0) {
return [...acc, [component, ...nestInParent(remaining)]];
} else {
return [...acc, [component]];
}
} else {
if(ignoreIndexAfter === null || index < ignoreIndexAfter){
return [...acc, component];
}
return acc;
}
}, []);
};
const isParent = true;
const input = [
{component:0},
{component:1},
{component:2},
{isParent, component:3},
{component:4},
{component:5},
{isParent, component:6},
{component:7},
{component:8}
];
const expected = [
0,
1,
2,
[
3,
4,
5,
[
6,
7,
8
]
]
];
const output = nestInParent(input);
console.log("input:", input);
console.log("output:", output);
console.log("passes?", JSON.stringify(output) === JSON.stringify(expected));
.as-console-wrapper { max-height: 100% !important; }