js 树形结构数据过滤 保留父级和子集
时间: 2024-04-08 16:28:27 浏览: 57
JS过滤树数据
你可以使用递归来过滤树形结构数据,保留父级和子集。以下是一个示例代码:
```javascript
function filterTreeData(treeData, filterFn) {
return treeData.filter(node => {
if (filterFn(node)) {
return true; // 如果当前节点满足条件,则保留
}
if (node.children) {
node.children = filterTreeData(node.children, filterFn); // 递归过滤子节点
return node.children.length > 0; // 如果子节点有保留的,则保留当前节点
}
return false; // 如果当前节点和子节点都不满足条件,则不保留
});
}
```
使用示例:
```javascript
const treeData = [
{
id: 1,
name: 'Node 1',
children: [
{
id: 2,
name: 'Node 1.1',
children: [
{
id: 4,
name: 'Node 1.1.1',
children: []
}
]
},
{
id: 3,
name: 'Node 1.2',
children: []
}
]
},
{
id: 5,
name: 'Node 2',
children: []
}
];
function filterFn(node) {
return node.name.includes('1'); // 过滤条件:节点名称包含 '1'
}
const filteredTreeData = filterTreeData(treeData, filterFn);
console.log(filteredTreeData);
```
输出结果:
```javascript
[
{
id: 1,
name: 'Node 1',
children: [
{
id: 2,
name: 'Node 1.1',
children: [
{
id: 4,
name: 'Node 1.1.1',
children: []
}
]
}
]
}
]
```
这段代码根据过滤条件保留了所有名称中包含 '1' 的节点,同时保留了满足条件的父节点及其子节点。你可以根据自己的需求修改过滤条件和数据结构。
阅读全文