Skip to content

Instantly share code, notes, and snippets.

@roadmanfong
Created April 27, 2016 18:12
Show Gist options
  • Save roadmanfong/05b7a1f17ab0c4b823e75eebabc85595 to your computer and use it in GitHub Desktop.
Save roadmanfong/05b7a1f17ab0c4b823e75eebabc85595 to your computer and use it in GitHub Desktop.
let tree = {
name: 'root',
children: [
{
name: 'a',
children: [
{ name: 'd' },
{ name: 'e' }
]
},
{
name: 'b',
children: [
{ name: 'f'},
{ name: 'g'},
{ name: 'h'},
]
},
{
name: 'c'
}
]
}
function depthFirstFlat(node) {
node.level = node.level || 0;
console.log(`name: ${node.name}, level: ${node.level}`);
if (node.children && node.children.length > 0 && (node.name === 'root' || node.name === 'b')) {
const modifiedChildren = node.children.map(child => {
return Object.assign({}, child, {level: node.level + 1})
})
.map(depthFirstFlat)
.reduce((prev, item) => [...prev, ...item], []);
return [node, ...modifiedChildren]
} else {
return [node];
}
}
depthFirstFlat(tree);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment