I have a recursive object of the structure:
const obj = {
name: 'entity-0',
children: [{
name: 'entity-0-0',
children: []
}, {
name: 'entity-0-1',
children: [{
name: 'entity-1-0',
children: []
}]
}]
}
And I'm currently converting it to a flat array like this:
const arr = [];
function convertObjToArr(obj, level, parent) {
arr.push({ name: obj.name, parent: parent?.name, level });
obj.children.forEach(v => this.convertObjToArr(v, level + 1, obj));
}
convertObjToArr(obj, 0);
This results in array that looks like this:
[
{ name: 'entity-0', level: 0 },
{ name: 'entity-0-0', parent: 'entity-0', level: 1 },
{ name: 'entity-0-1', parent: 'entity-0', level: 1 },
{ name: 'entity-1-0', parent: 'entity-0-1', level: 2}
]
What I now need to do is reverse the process. Where I give the generated arr
as the input and get obj
as the output. Is this possible? How would I do this?
This is as far as I've gotten:
function convertArrToObj(iArr) {
for(let i = 0; i < iArr.length; i++) {
if(!iArr[i].parent) newObj = { ...iArr[i], children: [] };
else {
// this should somehow find iArr[i].parent and insert itself into its children array
}
}
}
But as you can see, it's incomplete and I'm pretty sure it's not gonna be recursive, so if it's more than 1 layer deep it won't work, I don't think.