一个数组多个对象,拿id寻找id等于parentId为子集,放在多个个数组对象中, 组合成为一个多个树形结构,没有寻找到子集直接放在数组中,有子集则成为树形结构
时间: 2024-01-04 14:04:05 浏览: 61
平级数组结构组合成树形机构
好的,这是一个常见的树形结构的问题,我可以给你一些思路和代码。首先,我们可以遍历整个数组,将 parentId 等于某个 id 的对象添加到该 id 对应的子集数组中,如果没有找到子集则直接添加到数组中。这个过程可以使用一个 Map 来辅助,将每个 id 对应的对象保存在 Map 中,遍历时可以直接通过 id 查找对象。
接下来,我们需要将子集数组转换为树形结构。可以先遍历一遍数组,将每个对象的子集数组初始化为空数组,然后遍历一遍数组,将每个子集数组中的对象添加到该对象对应的子集数组中。这个过程可以通过递归来实现。
下面是一个基本的实现,你可以根据你的具体需求进行修改:
```javascript
function buildTree(data) {
const map = new Map();
const root = [];
// 先遍历一遍数组,将每个 id 对应的对象保存到 Map 中
for (const item of data) {
map.set(item.id, item);
item.children = []; // 初始化子集数组
}
// 再遍历一遍数组,将每个子集添加到父级的子集数组中
for (const item of data) {
const parent = map.get(item.parentId);
if (parent) {
parent.children.push(item);
} else {
root.push(item);
}
}
return root;
}
```
使用方法:
```javascript
const data = [
{ id: 1, parentId: null },
{ id: 2, parentId: 1 },
{ id: 3, parentId: 1 },
{ id: 4, parentId: 2 },
{ id: 5, parentId: 2 },
{ id: 6, parentId: null },
];
const tree = buildTree(data);
console.log(tree);
```
输出结果:
```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": null,
"children": []
}
]
```
阅读全文