I've a deep nested object like this:
{
'name_1': 'val',
'name_2': 'val',
'name_3': {
'name_4': {
'name_5': {
'name_6': 'val',
'name_7': 'val',
'name_8': {
'name_9': 'val'
}
}
}
}
}
Here key can be anything instead of name_1, name_2, name_3...etc(names key as name_1, name_2.. just for quick understanding)
I wanted to convert the above json to array of objects in the below mentioned format
[
{ "id": "1", "name": 'name_1: val', "parent_id": "0"},
{ "id": "2", "name": 'name_2: val', "parent_id": "0"},
{ "id": "3", "name": 'name_3', "parent_id": "0"},
{ "id": "4", "name": 'name_4', "parent_id": "3"},
{ "id": "5", "name": 'name_5', "parent_id": "4"},
{ "id": "6", "name": 'name_6: val', "parent_id": "5"},
{ "id": "7", "name": 'name_7: val', "parent_id": "5"},
{ "id": "8", "name": 'name_8', "parent_id": "5"},
{ "id": "9", "name": 'name_9: val', "parent_id": "8"},
]
Any help would be really apprectiated!!
You could take an iterative and recursive approach. (The id
is stored in an object to keep the same object reference for it and this allows to use it in all nested recursive calls.)
function flat(object, id = { id: 0 }, parent_id = 0) {
return Object.entries(object).reduce((r, [k, v]) => {
var name = k + (typeof v === 'string' ? ': ' + v : '');
r.push({ id: id.id++, name, parent_id });
if (v && typeof v === 'object') r.push(...flat(v, id, id.id));
return r;
}, []);
}
var data = { name_1: 'val', name_2: 'val', name_3: { name_4: { name_5: { name_6: 'val', name_7: 'val', name_8: { name_9: 'val' } } } } },
result = flat(data);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments