I have this tree structure:
data =
{
[
{
type: "folder"
name: "animals"
path: "/animals"
children :
[
{
type: "folder"
name: "cat"
path: "/animals/cat"
children:
[
{
type: "folder"
name: "images"
path: "/animals/cat/images"
children:
[
{
type: "file"
name: "cat001.jpg"
path: "/animals/cat/images/cat001.jpg"
},
{
type: "file"
name: "cat001.jpg"
path: "/animals/cat/images/cat002.jpg"
}
]
}
]
}
]
}
]
}
I want to turn it into
[
{
type: "folder"
name: "animals"
path: "/animals"
},
{
type: "folder"
name: "cat"
path: "/animals/cat"
},
{
type: "folder"
name: "images"
path: "/animals/cat/images"
},
{
type: "file"
name: "cat001.jpg"
path: "/animals/cat/images/cat001.jpg"
},
{
type: "file"
name: "cat001.jpg"
path: "/animals/cat/images/cat002.jpg"
}
]
I came up with this function, but seems does not work
function flatten(nodes, flattedNodes) {
for (let index = 0; index < nodes.length; index++) {
flattedNodes.push(nodes[index]);
if (nodes[index].children !== undefined)
if (nodes[index].children.length > 0)
flatten(nodes[index].children, flattedNodes);
}
}
let flattedTree = [];
flatten(data, flattedTree);
console.log(JSON.stringify(flattedTree, null, 4));
It does not flatten some elements. Any ideas how to fix?
Here's a solution using
flatMap()
and recursion:Complete snippet: