Open vaakian opened 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') // []
记录下来,过程中有些收获。