需要实现对人员进行搜索,第一种方法使用了递归,显得十分臃肿。
async handleSearch() {
const keyword = this.input2.trim().toLowerCase() // 获取搜索关键字并转换为小写
// 使用递归函数过滤树形数据
const filterTree = (nodes, keyword) => {
const filteredNodes = []
for (const node of nodes) {
if (node.label.toLowerCase().includes(keyword)) {
// 如果节点的标签包含关键字,将其添加到结果中
filteredNodes.push(node)
} else if (node.children && node.children.length > 0) {
// 如果节点有子节点,则递归过滤子节点
const filteredChildren = filterTree(node.children, keyword)
if (filteredChildren.length > 0) {
// 如果子节点中有匹配的结果,则添加父节点
const clonedNode = { ...node, children: filteredChildren }
filteredNodes.push(clonedNode)
}
}
}
return filteredNodes
}
// 调用递归函数过滤数据
this.filteredData = filterTree(this.filteredData, keyword)
if (keyword == '') {
const res = await getMember()
this.filteredData = res.data.data
}
},
第二种方法使用filter进行过滤,简单便捷。仅用一行代码实现,非常便捷。
handleSearch() {
this.$refs.tree.filter(this.keyword)
},