JS 关于树的操作 查找所有子节点,找出某一节点的父节点
程序员文章站
2022-06-08 09:14:21
...
1. 获取全部子节点(广度优先)VUE代码
// 数据
data: [{
id: 0,
label: '0级',
children: [{
id: 1,
label: '一级 1',
children: [{
id: 4,
label: '二级 1-1',
children: [{
id: 9,
label: '三级 1-1-1'
}, {
id: 10,
label: '三级 1-1-2'
}]
}]
}, {
id: 2,
label: '一级 2',
children: [{
id: 5,
label: '二级 2-1'
}, {
id: 6,
label: '二级 2-2'
}]
}, {
id: 3,
label: '一级 3',
children: [{
id: 7,
label: '二级 3-1'
}, {
id: 8,
label: '二级 3-2'
}]
}]
}],
// 方法
treeForeach(tree, func) {
tree.forEach(data => {
data.children && this.treeForeach(data.children, func) // 遍历子树
func(data)
})
},
// 调用
mounted() {
this.treeForeach(this.data, node => { console.log(node.id) })
}
2. 获取全部子节点(广度优先)VUE代码
// parentNodes.js
/**
* @description: 根据传入的[id]找寻父节点
* @param { id: 选中节点的id, upid: 选中节点的upid }, 要查找的树, nodes
*/
export function findAllParent(node, tree, parentNodes = [], index = 0) {
if (!node || node.upid === 0) {
return
}
findParent(node, parentNodes, tree)
const parentNode = parentNodes[index]
index += 1
findAllParent(parentNode, tree, parentNodes, index)
return parentNodes
}
function findParent(node, parentNodes, tree) {
for (let i = 0; i < tree.length; i++) {
const item = tree[i]
if (item.id === node.upid) {
parentNodes.push(item)
return
}
if (item.children && item.children.length > 0) {
findParent(node, parentNodes, item.children)
}
}
}
export default findAllParent
// 导入
import findParentNodes from '@/utils/parentNodes'
// 查找父结点
const parentNodes = findParentNodes({ id: this.choosed.id, upid: this.choosed.upid }, [root], nodes)
上一篇: 是什么导致大象腿 瘦腿势在必行