js ts 树节点过滤,保留父节点

592 阅读1分钟
let keyWard = 'keyWard'
const filter = (nodes) => {
  if (!(nodes && nodes.length)) {
    return [];
  }
  let newChildren = [];
  for (let node of nodes) {
    let tempRes = filter(node.children);
    // 不是叶子
    if (!node.isLeaf) {
      // 保留父节点的关键
      if(tempRes.length > 0) {
        newChildren.push({ ...node, children: tempRes });
      }
    } else {
      if (node?.fullname.toString()?.indexOf(keyWard) > -1) {
        newChildren.push({ ...node, children: filter(node) });
      }
    }
  }
  return newChildren;
}