js筛选出树形数据中指定层级的数据及其父级
时间: 2023-06-12 12:05:55 浏览: 136
假设我们有以下的树形数据:
```javascript
const treeData = [
{
id: 1,
label: 'Node 1',
children: [
{
id: 2,
label: 'Node 1-1',
children: [
{
id: 4,
label: 'Node 1-1-1',
children: [
{
id: 7,
label: 'Node 1-1-1-1',
},
{
id: 8,
label: 'Node 1-1-1-2',
},
],
},
{
id: 5,
label: 'Node 1-1-2',
},
{
id: 6,
label: 'Node 1-1-3',
},
],
},
{
id: 3,
label: 'Node 1-2',
},
],
},
];
```
假设我们需要筛选出第二级的数据及其父级,我们可以使用以下的代码:
```javascript
function filterTreeData(treeData, level) {
const filteredData = [];
function traverse(node, currentLevel, parentNodes) {
if (currentLevel === level) {
filteredData.push({
...node,
parentNodes,
});
}
if (node.children) {
const updatedParentNodes = [...parentNodes, node];
node.children.forEach(child => {
traverse(child, currentLevel + 1, updatedParentNodes);
});
}
}
treeData.forEach(node => {
traverse(node, 1, []);
});
return filteredData;
}
const filteredTreeData = filterTreeData(treeData, 2);
console.log(filteredTreeData);
```
这段代码中,我们定义了一个 `filterTreeData` 函数,它接受两个参数:要筛选的树形数据和要筛选的层级。函数内部使用递归遍历树形数据,当遍历到指定层级时,将该节点及其父级节点加入到 `filteredData` 数组中。最后返回筛选后的结果。在遍历的过程中,我们使用一个 `parentNodes` 数组来记录当前节点的所有父级节点。
阅读全文