js一组一维数组通过查找父节点的id组成新的树结构,没有找到符合的父节点则自身是父节点
时间: 2024-03-07 08:50:44 浏览: 66
js一维数组与三维数组互动,数据转换,类似购物车添加删除
可以通过以下步骤将一组一维数组转换成树结构:
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. 再次遍历一维数组,对于每个节点,查找其父节点是否存在于`map`对象中。
- 如果存在,将该节点添加到其父节点的`children`数组中。
- 如果不存在,将该节点作为根节点添加到树结构中。
```
let root;
for (let i = 0; i < arr.length; i++) {
const node = arr[i];
const parentId = node.parentId;
if (parentId === null || parentId === undefined || !map.hasOwnProperty(parentId)) {
root = node;
} else {
const parent = map[parentId];
if (!parent.children) {
parent.children = [];
}
parent.children.push(node);
}
}
```
完整代码如下:
```
function buildTree(arr) {
const map = {};
for (let i = 0; i < arr.length; i++) {
const node = arr[i];
map[node.id] = node;
}
let root;
for (let i = 0; i < arr.length; i++) {
const node = arr[i];
const parentId = node.parentId;
if (parentId === null || parentId === undefined || !map.hasOwnProperty(parentId)) {
root = node;
} else {
const parent = map[parentId];
if (!parent.children) {
parent.children = [];
}
parent.children.push(node);
}
}
return root;
}
```
其中,`arr`为一组一维数组,每个节点需要包含`id`和`parentId`两个属性。如果某个节点没有父节点,则其`parentId`应该为`null`或`undefined`。
阅读全文