【发布时间】:2020-06-16 06:51:56
【问题描述】:
您如何编写一个函数,该函数将对表示目录结构或路由路径树的对象的节点数组执行非扁平化转换。此外,如果任何路径都涉及创建空节点,您如何为结果结构创建这些节点。空目录只有它们的路径和子键。这是一个示例节点数组:
比如nodes = [{id: 50, path: "/apple/banana"}],返回
{
"path": "/",
"children": [
{
"path": "/apple",
"children": [
{
"id": 50,
"path": "/apple/banana",
"children": []
}
]
}
]
}
我有这个:
const tree = { path: '/', children:[] }
const sortedNodes = nodes.sort((a, b) => (a.path.split('/').length - b.path.split('/').length));
sortedNodes.forEach(node => {
const dirs = node.path.split('/').slice(1)
let traversed = tree // Hold the reference of tree
dirs.forEach((dir) => {
const foundChild = traversed.children.find(child => child.path.split('/').slice().pop() === dir)
foundChild ? traversed = foundChild : traversed.children.push({ path: node.path, id: node.id, children: [] });
})
})
console.log(tree);
【问题讨论】:
标签: javascript tree hierarchy flatten