Skip to content

Instantly share code, notes, and snippets.

@ninadvadujkar
Last active November 18, 2022 07:57
Show Gist options
  • Save ninadvadujkar/0fc769aa41b9bccab53a834edf78ca66 to your computer and use it in GitHub Desktop.
Save ninadvadujkar/0fc769aa41b9bccab53a834edf78ca66 to your computer and use it in GitHub Desktop.
Flatten a nested array of objects
const data = [
{
id: 251,
name: 'Top level 1',
parentId: null,
children: [
{
id: 253,
parentId: 251,
name: 'Inner level 1-1',
children: [
{
id: 456,
parentId: 253,
name: 'Inner level 1-1-1',
children: []
}
]
}
]
},
{
id: 252,
name: 'Top level 2',
parentId: null,
children: [
{
id: 254,
parentId: 252,
name: 'Inner level 2-1',
children: []
},
{
id: 255,
parentId: 252,
name: 'Inner level 2-2',
children: []
},
{
id: 256,
parentId: 252,
name: 'Inner level 2-3',
children: []
},
{
id: 257,
parentId: 252,
name: 'Inner level 2-4',
children: [
{
id: 258,
parentId: 257,
name: 'Inner level 2-4-1',
children: []
}
]
}
]
}
];
function flattenArrayOfObjects(data) {
const final = [];
function walk(children) {
if (!children.length) return;
children.forEach(({ children, ...rest }) => {
final.push({ ...rest });
if (children.length) {
return walk(children);
}
});
}
walk(data || []);
return final;
}
const d = flattenArrayOfObjects(data);
console.log(JSON.stringify(d, null, 2));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment