一、树结构
let tree = [
{
id: '1',
name: '节点1',
children: [
{
id: '1-1',
name: '节点1-1',
children: [
{
id: '1-1-1',
name: '节点1-1-1'
}
]
},
{
id: '1-2',
name: '节点1-2'
}
]
},
{
id: '2',
name: '节点2',
children: [
{
id: '2-1',
name: '节点2-1'
}
]
}
]
二、树查找节点实现方法
本文提供三种实现方式。为了做成通用方法,传入两个参数:tree(树)和func(函数,用于传入判断函数)。
1、递归实现
function findNode(tree, func) {
for (const node of tree) {
if (func(node)) return node
if (node.children) {
const res = findNode(node.children, func)
if (res) return res
}
}
return null
}
2、while循环实现
function findNode(tree, func) {
let node, list = [...tree]
while ((node = list.shift())) {
if (func(node)) {
return node
}
node.children && list.unshift(...node.children)
}
}
3、for循环实现
function findNode(tree, func) {
let node, curTree = [...tree]
for (let i = 0; i < curTree.length; i++) {
if (func(curTree[i])) {
return curTree[i]
}
if (curTree[i].children) {
curTree.splice(i + 1, 0, ...curTree[i].children)
}
}
}
三、具体案例
通过上述的树结构以及查找节点实现方法,随便选一种方法调用实现以下案例(非常简单)。
1、树结构查找第一个无叶子节点并返回
const firstNoChildrenNode = findNode(tree, (node) => {
return !node.children
})
console.log('第一个无叶子节点:', firstNoChildrenNode)
控制台打印结果:
2、树结构查找指定节点并返回
查找name值为“节点1-2”的节点
const data = findNode(tree, (node) => {
return node.name === '节点1-2'
})
console.log('找到了:', data)
控制台打印结果:
感谢您读完本文!如果本文对您有帮助,请点个赞呗,您的点赞是对我最大的支持和认可!
我的公众号:大前端教程,欢迎关注,会定期更新前端知识,希望能帮到您。