js列表结构转树状结构详细步骤
时间: 2023-07-31 17:04:07 浏览: 54
将列表结构转换为树状结构的具体步骤如下:
1. 遍历列表结构,获取每一个节点的 id 和 parentId(也就是其父节点的 id)。
2. 将这些节点按照 parentId 进行分组,得到一个以 parentId 为键,节点数组为值的对象。
3. 从根节点开始,递归遍历这个对象,将每个节点的子节点数组设置为这个对象中以该节点 id 为 parentId 的节点数组。
4. 返回根节点即可。
下面是一个示例代码实现:
```javascript
function listToTree(list) {
const map = {};
const roots = [];
// 遍历列表,生成以 id 为键,节点为值的对象
for (const node of list) {
map[node.id] = { ...node, children: [] };
}
// 将节点按照 parentId 进行分组
for (const node of Object.values(map)) {
if (node.parentId) {
map[node.parentId].children.push(node);
} else {
roots.push(node);
}
}
// 递归设置子节点数组
function setChildren(node) {
for (const child of node.children) {
setChildren(child);
}
if (!node.children.length) {
delete node.children;
}
}
// 从根节点开始递归
for (const root of roots) {
setChildren(root);
}
return roots.length > 1 ? { roots } : roots[0];
}
```
在这个示例代码中,假设传入的列表结构为一个数组,每个节点都有一个 id 和 parentId 属性,以及其他属性。函数返回一个树状结构,如果有多个根节点,则返回一个包含这些根节点的对象。