将数组数据转化成树形结构

将数组数据转化成树形结构以便于操作带有层级的下拉选项

数据结构

 

观察相对应的结构

要将列表型的数据转化成树形数据,需要用到递归算法  

思路

找树形结构的字段

id   pid比较合适

再发现   没有子节点的pid为空   有子节点的 pid 是父节点的id

例如  当id=1  pid=''

id=2   pid=1   也就是id=1的下面有子节点,  

id=3  pid=2   id=2下面有子节点     甚至id=4   pid=2  也就是有节点

上重点

封装一个方法  

/** *
 *
 *  将列表型的数据转化成树形数据 => 递归算法 => 自身调用自身 => 一定条件不能一样, 否则就会死循环
 *  遍历树形 有一个重点 要先找一个头儿
 * ***/
export function tranListToTreeData(list, rootValue) {
//定义个空数组接收参数
  var arr = []
  list.forEach(item => {
    if (item.pid === rootValue) {
      // 找到之后 就要去找 item 下面有没有子节点
      //条件不能是(list, rootValue),否则死递归
      const children = tranListToTreeData(list, item.id)
      if (children.length) {
        // 如果children的长度大于0 说明找到了子节点
        item.children = children
      }
      arr.push(item) // 把找到的数据内容加入到数组中
    }
  })
//返回这个数组
  return arr
}

可以遍历n层的数据  进行转化

调用的时候开始一定要记得  pid的最开始是空的  ''   


   this.xxxx= tranListToTreeData(result.depts, '')

调试来看,  第一次的list数组,rootValue是个空  ''  循环list    然后找pid=''的数据

找到后 再次调用自身的方法 → 传过去list的数组→  但是item.id已经过去到id的信息了   → 也就是id=1的例子  → 上面的红色字体    → 然后再次循环 → 判断 item.pid等于这个id吗? 此时的id等于一串字符串,pid依旧是空→ 一直等到循环找到一样的为止,然后最初得rootValue变成了id ,也就是说找到了子节点,→  if (children.length){}判断有结果,→将得到的数据加入到arr中,以此循环,并且返回出来这个arr,

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值