给定一个树和一个key值,树必须有id和children属性。通过遍历求解根节点到指定节点的路径,可以得到层级关系的字符串。可能的适用场景,通过用户部门id显示公司到部门的一个完整部门信息。
输入: 树形结构的列表,有id和children和当前节点的key值
输出: 根节点到当前节点的路径
// 计算完整路径
gitFullName(treeData, key) {
// 为节点添加parentId,并维护id节点对象方便查找
function addParent(tree = [], parId) {
tree.forEach((item, index, arr) => {
arr[index]['parentId'] = parId;
map.set(item.id, item);
if (item.children) {
addParent(item.children, item.id);
} else {
return;
}
});
}
// 递归遍历树
function reTree(key, map) {
let node = map.get(key);
if (!node) return;
let pid = node.parentId;
let name = node.name;
fullPath.unshift(name);
reTree(pid, map);
}
let data = JSON.parse(JSON.stringify(treeData));
let map = new Map();
let fullPath = [];
addParent(data, 'null');
reTree(key, map);
return fullPath;
}
注意:代码是vue2的写法