文章摘要
这篇文章介绍了一个基于树形数据结构的关键词搜索算法。文章通过递归方法实现树的遍历和搜索功能,核心逻辑如下:
1. **树形数据结构**:使用`treeList`存储树结构,每个节点包含标题和子节点。
2. **搜索功能**:
- `searchTree`方法用于递归遍历树结构,根据关键词进行筛选。
- 如果当前节点标题包含关键词,且`includeChildren`为真,则继续递归处理子节点。
- 如果当前节点标题不包含关键词但有子节点,则递归处理子节点,保留符合条件的节点。
3. **应用示例**:
- `searchOrg`方法调用`searchTree`,获取符合条件的树结构。
- `select`方法可能用于后续的树视图或操作功能。
文章重点在于实现高效的关键词搜索,同时保留子节点信息,适合层级数据的过滤和筛选场景。
<script>
export default {
props: {
treeList: {
type: Array,
default: ()=> []
},
},
data() {
return {
searchPerson: ”,
currentTree: this.treeList,
}
},
methods: {
searchTree(tree, keyword, includeChildren=false) {
const newTree=[]
for (let i=0; i < tree.length; i++) {
const node=tree[i]
if (node.title.includes(keyword)) {
// 如果当前节点符合条件,则将其复制到新的树形结构中,并根据 includeChildren 参数决定是否将其所有子节点也复制到新的树形结构中
newTree.push({ …node, children: includeChildren ? this.searchTree(node.children || [], ”, true) : [] })
} else if (node.children) {
// 如果当前节点不符合条件且存在子节点,则递归遍历子节点,以继续搜索
const result=this.searchTree(node.children, keyword, true)
if (result.length > 0) {
// 如果子节点中存在符合条件的节点,则将其复制到新的树形结构中
newTree.push({ …node, children: result })
}
}
}
return newTree
},
searchOrg() {
this.currentTree=this.searchTree(this.treeList, this.searchPerson, true)
},
async onSelect(selectedKeys, info) {
},
}
}
</script>
export default {
props: {
treeList: {
type: Array,
default: ()=> []
},
},
data() {
return {
searchPerson: ”,
currentTree: this.treeList,
}
},
methods: {
searchTree(tree, keyword, includeChildren=false) {
const newTree=[]
for (let i=0; i < tree.length; i++) {
const node=tree[i]
if (node.title.includes(keyword)) {
// 如果当前节点符合条件,则将其复制到新的树形结构中,并根据 includeChildren 参数决定是否将其所有子节点也复制到新的树形结构中
newTree.push({ …node, children: includeChildren ? this.searchTree(node.children || [], ”, true) : [] })
} else if (node.children) {
// 如果当前节点不符合条件且存在子节点,则递归遍历子节点,以继续搜索
const result=this.searchTree(node.children, keyword, true)
if (result.length > 0) {
// 如果子节点中存在符合条件的节点,则将其复制到新的树形结构中
newTree.push({ …node, children: result })
}
}
}
return newTree
},
searchOrg() {
this.currentTree=this.searchTree(this.treeList, this.searchPerson, true)
},
async onSelect(selectedKeys, info) {
},
}
}
</script>
© 版权声明
文章版权归作者所有,未经允许请勿转载。