最近有一个需求是根据树节点的id查找树节点的label,其实这种应该后端直接把id和label传过来就行了,就不用使用多余的操作来降低系统性能了,但是既然已经有了这个需求,我们就来解决吧!
首先,你得有树节点的数据:
// 使用示例
const treeData = [
{
id: 2,
name: '节点2',
children: [
{
id: 4,
name: '节点4',
children: [
{ id: 6, name: '节点6' },
{ id: 7, name: '节点7' }
]
},
{
id: 5,
name: '节点5',
children: [
{ id: 8, name: '节点8' },
{ id: 9, name: '节点9' }
]
}
]
}
]
然后,你就需要写一个函数对这些数据进行操作了,这个函数传递的参数有两个,一个是这整个树的数据(数组)和你要查找的id(注意你的id是字符串还是数字,类型得相同),以下是递归函数实现过程:
const searchNode = (node, nodeId) => {
if (node.id === nodeId) {
return node.name
} else if (node.children !== undefined) {
for (let i = 0; i < node.children.length; i++) {
const result = searchNode(node.children[i], nodeId)
if (result !== null) {
return result
}
}
}
return null
}
函数和数据都有了我们举个例子吧,比如要在这个树中查找id为6的label,以下是使用示例:
// 使用示例
const nodeId = 6
const result = searchNode({ id: 0, children: treeData }, nodeId)
if (result !== null) {
console.log(`包含id为${nodeId}的节点,label为${result}`)
} else {
console.log(`未找到id为${nodeId}的节点`)
}
完整的js代码:
<script>
// 使用示例
const treeData = [
{
id: 2,
name: '节点2',
children: [
{
id: 4,
name: '节点4',
children: [
{ id: 6, name: '节点6' },
{ id: 7, name: '节点7' }
]
},
{
id: 5,
name: '节点5',
children: [
{ id: 8, name: '节点8' },
{ id: 9, name: '节点9' }
]
}
]
}
]
const searchNode = (node, nodeId) => {
if (node.id === nodeId) {
return node.name
} else if (node.children !== undefined) {
for (let i = 0; i < node.children.length; i++) {
const result = searchNode(node.children[i], nodeId)
if (result !== null) {
return result
}
}
}
return null
}
// 使用示例
const nodeId = 6
const result = searchNode({ id: 0, children: treeData }, nodeId)
if (result !== null) {
console.log(`包含id为${nodeId}的节点,label为${result}`)
} else {
console.log(`未找到id为${nodeId}的节点`)
}
</script>
分享书摘:
“后来走廊被黄昏染色,冬天被大雪唤醒,思念被歌曲收藏,却找不到分享的人,告别就是看到所有美好的东西,也不会再和你说了”