根据id跟pid组装成一个树形数组
时间: 2024-10-16 15:20:50 浏览: 18
将数据组织成树形数组通常涉及到层次结构的数据处理,比如在数据库中的父子记录或者是项目管理中的任务层级。这种数组表示法中,每个节点包含一个ID标识自身,一个PID(Parent ID)标识其父节点的ID,以及可能的一些其他属性如名称、层级等。
假设有一个简单的例子:
```json
[
{
"id": 1,
"name": "根节点",
"children": [
{
"id": 2,
"name": "子节点1",
"pid": 1
},
{
"id": 3,
"name": "子节点2",
"pid": 1
},
{
"id": 4,
"name": "孙子节点",
"pid": 2
}
]
}
]
```
在这个例子中,1是根节点,它的两个子节点分别是2和3,而4是子节点2的一个孙节点。通过递归遍历并根据PID关联,你可以构建出整个树形结构。
相关问题
根据id跟pid写一个组装成一个树形数组的方法
在JavaScript中,你可以使用递归的方式来编写一个函数,将基于id和pid的数据组装成一个树形数组结构。这里是一个简单的例子:
```javascript
function buildTree(data, rootId = null) {
let tree = [];
// 遍历原始数据
data.forEach(item => {
if (item.pid === rootId) { // 如果当前项的父ID等于根ID
const node = item; // 创建新节点
node.children = []; // 初始化子节点列表
// 递归查找并添加子节点
tree.push(node);
buildTree(data, item.id).forEach(childNode => {
node.children.push(childNode);
});
}
});
return tree;
}
```
这个`buildTree`函数接受一个包含`id`和`pid`字段的对象数组(通常代表数据库查询结果),以及一个可选的`rootId`(默认为null,表示无父级)。它首先创建一个空数组`tree`来存放最终的树形结构。
对于每个元素,如果其父ID匹配传入的根ID,我们就将其作为新的树节点,并开始递归查找该节点的所有子节点,将它们添加到当前节点的`children`属性中。最后返回整个树形结构。
如果你有具体的`data`数组,可以像这样使用这个函数:
```javascript
const dataArray = ...; // 你的数据数组
const treeArray = buildTree(dataArray);
export function transTreeData(list) { // 1. 遍历数组中所有的数据对象,给每一个对象添加chilren属性值为[] // 2. 创建一个映射对象(js对象)为了方便找数据对象 通过id 可以直接找到对应的数据对象 const mapObj = { } list.forEach(item => { item.children = [] mapObj[item.id] = item }) // 3. 实现平铺数据转树形数据 const newArr = [] // 存储的是一级的数据 list.forEach(item => { // 根据当前取出的对象,使用item.pid 找父级 const parent = mapObj[item.pid] // undefined || 一级的数据对象 if (parent) { // 如果parent=数据对象 说明item 是二级的数据 parent.children.push(item) } else { // 如果parent=undefined 说明item 是一级的数据 newArr.push(item) } }) // console.log(newArr,'newArr'); return newArr }这段代码的意思
这段代码实现了将一个平铺的数组数据转换成树形数据的功能。具体实现过程如下:
1. 遍历数组中所有的数据对象,给每一个对象添加children属性值为[],以便后续存储子节点。
2. 创建一个映射对象(mapObj),用于方便通过id找到对应的数据对象。
3. 遍历数组(list),根据每个数据对象的pid找到对应的父级数据对象,如果存在,则将当前数据对象存储在父级的children数组中,否则说明当前数据对象是一级数据,直接存储在newArr数组中。
最终返回newArr数组,即转换后的树形数据。
阅读全文