扁平数据转树形数据结构

 扁平数据转树形数据结构需要数据里每一项拥有id和pid,用于确定父子关系,如下

const data = [
  {id:"01", name: "张大大", pid:"", job: "项目经理"},
    
  {id:"02", name: "小亮", pid:"01", job: "产品leader"},
  {id:"07", name: "小丽", pid:"02", job: "产品经理"},
  {id:"08", name: "大光", pid:"02", job: "产品经理"},
    
  {id:"03", name: "小美", pid:"01", job: "UIleader"},
  {id:"09", name: "小高", pid:"03", job: "UI设计师"},
  {id:"05", name: "老王", pid:"01", job: "测试leader"},
  {id:"06", name: "老李", pid:"01", job: "运维leader"},
    
  {id:"04", name: "老马", pid:"01", job: "技术leader"},
  {id:"10", name: "小刘", pid:"04", job: "前端工程师"},
  {id:"11", name: "小华", pid:"04", job: "后端工程师"},
  {id:"12", name: "小李", pid:"04", job: "后端工程师"},
    
  {id:"13", name: "小赵", pid:"05", job: "测试工程师"},
  {id:"14", name: "小强", pid:"05", job: "测试工程师"},
  {id:"15", name: "小涛", pid:"06", job: "运维工程师"}
]

方法一:遍历过滤

方法简述,1.定义空数组,2.遍历找爹,pid为''是最大的爹3.把最大的放进数组4.过滤所有数组,pid和爹的id相等的形成新数组,设置成爹的属性5.返回刚才定义的数组6.打印查看

    function arrTotree(list) {
            const treeArr = []
            list.forEach(item => {
                if (item.pid === '') {
                    treeArr.push(item)
                }
                const children = list.filter(obj => obj.pid === item.id)
                if (children.length === 0) return
                item.children = children
            })
            return treeArr
        }
        const arr = arrTotree(data)
        console.log(arr);

方法二:遍历数组

  function arrTotree(list, rootValue) {
            const treeArr = []
            list.forEach(item => {
                if (item.pid === rootValue) {
                    const children = arrTotree(list, item.id)
                    if (children.length) {
                        item.children = children
                    }
                    treeArr.push(item)
                }
            })
            return treeArr
        }
        const arr = arrTotree(data, '')
        console.log(arr);


版权声明:本文为weixin_59324977原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。