树形结构数据根据子级节点获取逐渐父级方法
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)