过滤tree

60 阅读1分钟

保留组织机构关系

保留匹配节点的祖、父,和所有子节点

function filterTree(nodes: any[], query: string) {
  const newChildren: any[] = []
  nodes.forEach(node => {
    const children = filterTree(node.children || [], query)
    if (node.orgName.includes(query)) {
      newChildren.push(node)
    } else if (children.length) {
      node.children = children
      newChildren.push(node)
      selectedKeysByFilter.push(node.orgId)
    }
  })
  return newChildren
}

保留组织机构关系

保留匹配节点的祖、父,如果子节点中没有匹配的则保留所有子节点,如果子节点中有匹配的则只保留所有匹配的子节点

function filterTree(nodes: any[], query: string) {
  const newChildren: any[] = []
  nodes.forEach(node => {
    const children = filterTree(node.children || [], query)
    if (children.length) {
      node.children = children
      newChildren.push(node)
      selectedKeysByFilter.push(node.orgId)
    } else if (node.orgName.includes(query)) {
      newChildren.push(node)
    }
  })
  return newChildren
}

不保留组织机构关系

function filterTree(nodes: any[], query: string) {
  const newChildren: any[] = []
  nodes.forEach(node => {
    // 以下只需要考虑自身的节点满足条件即可,不用带上父节点
     if (node.orgName.includes(query)) {
       node.children = filterTree(node.children || [], query)
       newChildren.push(node)
     } else {
       newChildren.push(...filterTree(node.children || [], query))
     }
  })
  return newChildren
}