js在一组一维数组中查找父节点,没有符合父节点的元素,自己就是父节点,返回组成的树结构
时间: 2024-03-07 18:50:45 浏览: 62
可以通过以下步骤将一组一维数组转换成树结构:
1. 定义一个空对象`map`,用于存储每个节点的信息。
2. 遍历一维数组,将每个节点的信息存储到`map`对象中,并将该节点的`id`作为`map`对象的属性名,节点信息作为该属性的值。
```
const map = {};
for (let i = 0; i < arr.length; i++) {
const node = arr[i];
map[node.id] = node;
}
```
3. 定义一个空数组`result`,用于存储树结构的根节点。
4. 遍历一维数组,对于每个节点,查找其父节点是否存在于`map`对象中。
- 如果存在,将该节点添加到其父节点的`children`数组中。
- 如果不存在,将该节点作为根节点添加到`result`数组中。
```
const result = [];
for (let i = 0; i < arr.length; i++) {
const node = arr[i];
const parentId = node.parentId;
if (parentId === null || parentId === undefined || !map.hasOwnProperty(parentId)) {
result.push(node);
} else {
const parent = map[parentId];
if (!parent.children) {
parent.children = [];
}
parent.children.push(node);
}
}
```
5. 返回`result`数组即可。
完整代码如下:
```
function buildTree(arr) {
const map = {};
for (let i = 0; i < arr.length; i++) {
const node = arr[i];
map[node.id] = node;
}
const result = [];
for (let i = 0; i < arr.length; i++) {
const node = arr[i];
const parentId = node.parentId;
if (parentId === null || parentId === undefined || !map.hasOwnProperty(parentId)) {
result.push(node);
} else {
const parent = map[parentId];
if (!parent.children) {
parent.children = [];
}
parent.children.push(node);
}
}
return result;
}
```
其中,`arr`为一组一维数组,每个节点需要包含`id`和`parentId`两个属性。如果某个节点没有父节点,则其`parentId`应该为`null`或`undefined`。
阅读全文