大概的思路就是这个:
树状图的规则是 二级的 pid 等于 一级的 id 从这个规则进行下手 结构数据遍历数据,拆分他的数据结构 可以遍历n条的数据,主要就是通过递归的方法实现
以下就是代码案例(如有不准确的地方,欢迎各位大佬指正)
// 处理树状图的信息
// 将列表的数据转化树形数据 -> 递归算法 -> 自身调用自身 -> 一定条件不能一样 -> 否则就会循环
// 遍历树形 有一个重点 先找一个头儿
export function tranLisToreeData(list, rootValue) {var arr = []list.forEach(item => {if (item.pid === rootValue) {// 找到之后 就要去找item 下面有没有子节点const children = tranLisToreeData(list, item.id)if (children.length) {// 如果长度大于 0 说明找到了子节点item.children = children}arr.push(item)}})return arr
}
以下是对上面代码的介绍(如有不准确的地方,欢迎各位大佬指正)
tranListToTreeData
函数接收两个参数:list
是原始的列表数据,rootValue
是根节点的值。- 函数首先创建了一个空数组
arr
,用于存储树形结构的节点。- 然后,它遍历列表数据
list
。- 对于每个节点
item
,如果节点的pid
属性与rootValue
相等,说明找到了一个根节点。- 然后,递归地调用
tranListToTreeData
函数,查找当前节点的子节点,并将结果存储在children
变量中。- 如果子节点存在(即
children.length > 0
),则将子节点添加到当前节点的children
属性中。- 最后,将当前节点添加到结果数组
arr
中。- 最终返回结果数组
arr
,其中包含了树形结构的所有节点。这个函数的关键在于递归地查找每个节点的子节点,并将其添加到相应的父节点下。这样就能将一个扁平的列表数据转换成树形结构的数据。