处理后台<平铺数据>,转换为<树形数据>

处理后台平铺数据,变成树形数据

后台发来的数据是一级的数组对象
我们在做树状图是需要树形结构数据
用children存储二级数据
如:

arr=[
 	  {
    
    id:"01", pid:"",   "name":"老王" },
 	  {
    
    id:"02", pid:"01", "name":"小张" }
  ]

上面的结构说明: 老王是小张的上级
实现后结构:

 arr=[
	  {
    
    id:"01", pid:"", "name":"老王",children:[
	 	  {
    
    id:"02", pid:"01", "name":"小张" }
	   ] },
 ]
/**
 * 把平铺的数组变成树状的数组的函数
 */
 function tranListToTreeData(arr) {
    
    
  const treeArr = []
  const map = {
    
    }
    // 遍历出得到以id为属性名,这个id的全部信息为属性值的数组对象,
    //方便后面遍历出pid来与id进行比较 存储数据 
    // 给所有的id都添加一个children属性名

  arr.forEach(item => {
    
    
    item.children = []
    map[item.id] = item
  })
    // 再次遍历来将pid拿出来,如果有pid就是有上级,
    //就会被加入到pid=id的那个领导的children中,
    //否则就是一级,直接推进准备好的treeList数组

  arr.forEach(item => {
    
    
    const pItem = map[item.pid]
    if (pItem) {
    
    
      pItem.children.push(item)
    } else {
    
    
      treeArr.push(item)
    }
  })
  return treeArr
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40797578/article/details/128465786