js数组递归转树形结构
时间: 2023-09-01 19:11:00 浏览: 96
好的,对于这个问题,可以使用递归的方式来将数组转为树形结构。
首先,我们需要定义一个函数,用于将每个节点插入到对应的父节点下面,如下:
```javascript
function buildTree(nodes) {
var map = {};
var tree = [];
var i;
var node;
for (i = 0; i < nodes.length; i += 1) {
map[nodes[i].id] = i;
nodes[i].children = [];
}
for (i = 0; i < nodes.length; i += 1) {
node = nodes[i];
if (node.parent_id) {
nodes[map[node.parent_id]].children.push(node);
} else {
tree.push(node);
}
}
return tree;
}
```
其中,我们先遍历节点数组,将每个节点添加到一个 map 中,之后再次遍历节点数组,根据每个节点的 `parent_id` 属性将其插入到对应的父节点下面。
接着,我们可以定义一个数组,包含一些节点数据,如下:
```javascript
var nodes = [
{ id: 1, parent_id: null, name: 'Node 1' },
{ id: 2, parent_id: 1, name: 'Node 1.1' },
{ id: 3, parent_id: 1, name: 'Node 1.2' },
{ id: 4, parent_id: 2, name: 'Node 1.1.1' },
{ id: 5, parent_id: 2, name: 'Node 1.1.2' },
{ id: 6, parent_id: 3, name: 'Node 1.2.1' },
];
```
最后,我们可以调用 `buildTree` 函数将节点数组转换为树形结构,如下:
```javascript
var tree = buildTree(nodes);
console.log(tree);
```
输出结果如下:
```javascript
[
{
"id": 1,
"parent_id": null,
"name": "Node 1",
"children": [
{
"id": 2,
"parent_id": 1,
"name": "Node 1.1",
"children": [
{
"id": 4,
"parent_id": 2,
"name": "Node 1.1.1",
"children": []
},
{
"id": 5,
"parent_id": 2,
"name": "Node 1.1.2",
"children": []
}
]
},
{
"id": 3,
"parent_id": 1,
"name": "Node 1.2",
"children": [
{
"id": 6,
"parent_id": 3,
"name": "Node 1.2.1",
"children": []
}
]
}
]
}
]
```
希望可以帮到您!
阅读全文