0
点赞
收藏
分享

微信扫一扫

树形结构数据根据子级节点获取逐渐父级方法

我是小瘦子哟 2022-01-05 阅读 63

树形结构数据根据子级节点获取逐渐父级方法

1 业务需求

根据表格数据中的最子级节点逐级获取父级数据,并且拼接为 设计单位/中国电建集团北京勘测设计研究院有限公司/某负责人格式数据,并且高效。

2 获取树形结构数组,解析为 hash 结构。

	let hashMap = {}

    setExpandTree(data, num,max,Pkey='') {
      if (data) {
        data.map(item => {
          hashMap[item.key] = item;
          item.Pkey = Pkey;
          item.checked=false;
          if(num===1){
            item.disableCheckbox = true;
          }
          if (item.children) {
            item.isLeaf=false;
            item.expanded = num<max;
            setExpandTree(item.children,num+1,max,item.key);
          }else{
            item.isLeaf=true;
          }
        });
      }
    }

此函数不但有解析为 hash 结构方法,还包括判断节点是否展开,判断能否选择方法。

3 通过查找对象获取逐级父级

   findHashMapPkey(data,key,string=''){
     if(data[key].Pkey){
       string =data[key].name +'/'+string;
       return findHashMapPkey(data,data[key].Pkey,string)
     }else{
       string = data[key].name +'/'+string;
       return string.substr(0,string.length-1);
     }
   }

完整代码

let hashMap = {}

let tree = [
    {
        key: '1',
        name: '1',
        children: [
            {

                key: '1-1',
                name: '1-1',
                children: [
                    {
                        key: '1-1-1',
                        name: '1-1-1',
                    },
                    {
                        key: '1-1-2',
                        name: '1-1-2',
                    },
                    {
                        key: '1-1-3',
                        name: '1-1-3',
                    }
                ]
            },

            {
                key: '1-2',
                name: '1-2',
                children: [
                    {
                        key: '1-2-1',
                        name: '1-2-1',
                    },
                    {
                        key: '1-2-2',
                        name: '1-2-2',
                    },
                    {
                        key: '1-2-3',
                        name: '1-2-3',
                    }
                ]
            }
        ]
    }
]

function setExpandTree(data, num, max, Pkey = '') {
    if (data) {
        data.map(item => {
            hashMap[item.key] = item;
            item.Pkey = Pkey;
            item.checked = false;
            if (num === 1) {
                item.disableCheckbox = true;
            }
            if (item.children) {
                item.isLeaf = false;
                item.expanded = num < max;
                setExpandTree(item.children, num + 1, max, item.key);
            } else {
                item.isLeaf = true;
            }
        });
    }
}

function findHashMapPkey(data, key, string = '') {
    if (data[key].Pkey) {
        string = data[key].name + '/' + string;
        return findHashMapPkey(data, data[key].Pkey, string)
    } else {
        string = data[key].name + '/' + string;
        return string.substr(0, string.length - 1);
    }
}


setExpandTree(tree, 1, 2)
let a = findHashMapPkey(hashMap, '1-2-3')
console.log(a)
举报

相关推荐

0 条评论