const filterTree=(nodes, query)=>{
// 结束递归的条件
if (!(nodes && nodes.length)) {
return []
}
for (const node of nodes) {
//一、带父节点 以下两个条件任何一个成立,当前节点都应该加入到新子节点集中
// 1. 子孙节点中存在符合条件的,即 subs 数组中有值
// 2. 自己本身符合条件
const subs = filterTree(node.children, query)
if (node.nodeName.includes(query)) {
newChildren.push(node)
} else if (subs && subs.length) {
node.children = subs
newChildren.push(node)
}
//二、不带父节点 以下只需要考虑自身的节点满足条件即可,不用带上父节点
// if (node.nodeName.includes(query)) {
// newChildren.push(node)
// node.children = filterTree(node.children, query)
// } else {
// newChildren.push(...filterTree(node.children, query))
// }
}
return newChildren.length ? newChildren : []
}
js 树结构的筛选
于 2022-06-21 15:59:14 首次发布