树结构过滤即保留某些符合条件的节点,剪裁掉其它节点。一个节点是否保留在过滤后的树结构中,取决于它以及后代节点中是否有符合条件的节点。可以传入一个函数描述符合条件的节点:
function treeFilter(tree, func) {
// 使用map复制一下节点,避免修改到原树
return tree
.map(node => ({ ...node }))
.filter(node => {
node.children = node.children && treeFilter(node.children, func)
return func(node) || (node.children && node.children.length)
})
}
const arr = treeFilter(columns, node => showKeys.includes(node.key))
console.log([...arr])