const data = [{
id: 1, type: 1, name: '测试', children: [{
id: 2, type: 1, name: '121212', children: [{
id: 5, type: 1, name: '121212',
}, {
id: 6, type: 1, name: '121212',
}, {
id: 7, type: 1, name: '121212',
}]
}, {
id: 3, type: 1, name: '121212', children: []
}, {
id: 4, type: 1, name: 'dgsda', children: []
}]
}, {
id: 11, type: 1, name: '测试11', children: [{
id: 12, type: 1,
name: '22',
children: [{
id: 15, type: 1, name: '3',
}, {
id: 16, type: 1, name: 'ss',
}]
}, {
id: 13, type: 1, name: '121212',
}, {
id: 14, type: 1, name: 'dgsda', children: []
}]
}];
const getFilterTreeData = (filterItem, data, newArr = []) => {
if (!filterItem.length) { return data; }
data.forEach(item => {
if (filterItem.indexOf(item.id) !== -1) {
// push符合筛选条件的节点
newArr.push(item);
}
// 向下查找
if (item.children && item.children.length) {
const nextNode = getFilterTreeData(filterItem, item.children);
if (nextNode && nextNode.length) {
// 存储该节点,同时将该节点的children更新为递归后的children
let node = { ...item, children: nextNode };
newArr.push(node);
}
}
})
return newArr
}
const arr = getFilterTreeData([2, 3, 13], data, [])
console.log(arr);
结果如下: