vaakian / vaakian.github.io

some notes
https://vaakian.github.io
3 stars 0 forks source link

过滤Tree #30

Open vaakian opened 2 years ago

vaakian commented 2 years ago

记录下来,过程中有些收获。

function filterTree(nodes, filterName) {
  let res = []
  for(let node of nodes || []) {
    // 如果本层匹配到,就直接保存
    if(node.name === filterName) res.push(node)
    // 否则检查孩子
    else {
      let newNode = {
          ...node, 
          children: filterTree(node.children, filterName),
        }
        // children有长度,说明孩子匹配到关键字了
        if(newNode.children.length > 0)  res.push(newNode)
    }
  }
  return res
}
let nodes = [
  {name: 'A', children: [
    {name: 'B'},
    {name: 'D', children: [{name: 'E'}]}
  ]},
  {name: 'C', children: [{name: 'E'}]}
]

//let result = filterTree(nodes, 'E')
//console.log(JSON.stringify(result, null, 2))
console.log(filterTree(nodes, 'E') // {name: 'B'} 被过滤掉了
console.log(filterTree(nodes, 'B') // [{name: A, children[ { name: 'B' } ] }]
console.log(filterTree(nodes, 'A') // nodes[0]
console.log(filterTree(nodes, 'F') // []