js将数组内后一个元素作为前一个子元素组成树结构
时间: 2023-06-26 07:05:12 浏览: 98
可以使用递归来实现将数组转换为树结构。假设数组中每个元素都是一个对象,其中包含一个属性 `id` 用于标识该元素的唯一性,另一个属性 `parentId` 用于标识该元素的父元素的 `id`,根元素的 `parentId` 为 `null`。
首先遍历数组,将每个元素存储到一个以 `id` 为键的对象中,方便后面查找元素。
然后再次遍历数组,对于每个元素,如果它的 `parentId` 为 `null`,则将它作为根元素添加到结果数组中;如果它的 `parentId` 不为 `null`,则在以 `id` 为键的对象中查找它的父元素,将它作为父元素的子元素添加到父元素的 `children` 属性中。
以下是代码示例:
```javascript
function arrayToTree(arr) {
const map = {}; // 以 id 为键的对象
const result = []; // 结果数组
// 遍历数组,将每个元素存储到 map 中
for (const item of arr) {
map[item.id] = item;
item.children = []; // 初始化 children 属性
}
// 再次遍历数组,将每个元素添加到对应的父元素的 children 属性中
for (const item of arr) {
const parent = map[item.parentId];
if (!parent) { // 如果没有父元素,则将它作为根元素添加到结果数组中
result.push(item);
} else { // 否则将它添加到父元素的 children 属性中
parent.children.push(item);
}
}
return result;
}
```
例如,对于以下数组:
```javascript
const arr = [
{id: 1, parentId: null},
{id: 2, parentId: 1},
{id: 3, parentId: 1},
{id: 4, parentId: 2},
{id: 5, parentId: 2},
{id: 6, parentId: 3},
{id: 7, parentId: 3},
];
```
调用 `arrayToTree(arr)` 将返回以下树结构:
```javascript
[
{
"id": 1,
"parentId": null,
"children": [
{
"id": 2,
"parentId": 1,
"children": [
{
"id": 4,
"parentId": 2,
"children": []
},
{
"id": 5,
"parentId": 2,
"children": []
}
]
},
{
"id": 3,
"parentId": 1,
"children": [
{
"id": 6,
"parentId": 3,
"children": []
},
{
"id": 7,
"parentId": 3,
"children": []
}
]
}
]
}
]
```
阅读全文