function* treeIter(root) {
yield root
for(const child of root.children || []) {
yield* treeIter(child)
}
}
const tree = {
name: "root",
children: [
{
name: "item1",
children: [
{
name: "11",
children: [
{
name: "111",
children: [],
}
],
},
{
name: "12",
children: [],
},
{
name: "13",
children: [],
}
],
},
{
name: "item2",
children: [
{
name: "21",
children: [],
}
],
},
],
}
Array.from(treeIter(tree), x => x.name)
// ["root", "item1", "11", "111", "12", "13", "item2", "21"]