一、找節(jié)點(diǎn)以上路徑
// 根據(jù)節(jié)點(diǎn)找出路徑
getPathByTheNode(treeData, key, attr) {
// 首先我們先定義個(gè)數(shù)組,用來(lái)保存路徑節(jié)點(diǎn)id
let nodePathArray = []
// (tree為目標(biāo)樹,targetId為目標(biāo)節(jié)點(diǎn)id)
function getNodeRoute(tree, targetId) {
for (let index = 0; index < tree.length; index++) {
if (tree[index].children) {
let endRecursiveLoop = getNodeRoute(tree[index].children, targetId)
if (endRecursiveLoop) {
nodePathArray.push(tree[index][attr])
return true
}
}
if (tree[index][attr] === targetId) {
nodePathArray.push(tree[index][attr])
return true
}
}
}
getNodeRoute(treeData, key) //查找id為112的節(jié)點(diǎn)路徑
let res = nodePathArray.reverse().join('->')
return res
},
// 調(diào)用
this.leftChildObj.treeData為樹形樹的數(shù)據(jù)
let res = this.getPathByTheNode(this.leftChildObj.treeData, e.node.dataRef.title,'title')
console.log(res)

Snipaste_2021-04-07_12-53-15.png

Snipaste_2021-04-07_12-54-32.png

Snipaste_2021-04-07_12-55-16.png

Snipaste_2021-04-07_12-55-36.png
二、找出樹所有路徑
1.先找出最底層節(jié)點(diǎn),沒(méi)有子級(jí)或者子級(jí)長(zhǎng)度為0
findIdByName(initObj) {
let arr = []
function find(obj) {
for (let i = 0; i < obj.length; i++) {
if (!obj[i].children || obj[i].children.length === 0) {
arr.push(obj[i].title)
} else {
find(obj[i].children);
}
}
}
find(initObj);
return arr
},
2.遍歷最底層節(jié)點(diǎn),根據(jù)某個(gè)樹節(jié)點(diǎn)找出此節(jié)點(diǎn)以上的路徑