在上面基础上,增加从ParentId开始层级过滤,这样可以过滤掉没有顶级节点的数据
时间: 2023-12-09 07:02:26 浏览: 35
好的,针对您的问题,我们可以在找到根节点之后,再增加一个参数`level`,表示要过滤的层级。只有在当前层级小于等于`level`的节点才会被添加到结果集中。具体步骤如下:
1. 遍历列表,找到parentId为null的节点,将这些节点作为根节点。
2. 对于每一个根节点,递归遍历其子节点,如果子节点列表为空,则说明这个节点是叶子节点,判断当前节点的层级是否小于等于`level`,如果是,则将其添加到结果集中。
3. 如果当前节点的层级小于`level`,则递归遍历其子节点,重复步骤2。
4. 重复步骤2和步骤3,直到所有的根节点都被遍历完毕。
下面是一个示例的JavaScript代码实现:
```
function findLeafNodesByLevel(list, level, parentId = null, currentLevel = 1) {
const result = [];
for (const node of list) {
if (node.parentId === parentId) {
const children = list.filter(item => item.parentId === node.id);
if (children.length === 0 && currentLevel <= level) {
result.push(node);
} else if (currentLevel < level) {
result.push(...findLeafNodesByLevel(list, level, node.id, currentLevel + 1));
}
}
}
return result;
}
```
其中,`list`是待处理的数组,`level`表示要过滤的层级,`parentId`和`currentLevel`是内部使用的参数,分别表示当前节点的父节点ID和当前节点的层级。
这个函数会返回一个符合条件的没有子节点的数据列表。需要注意的是,如果树状结构比较深,可能会导致递归调用的次数较多,建议增加递归深度限制或者其他优化方式来避免栈溢出等问题。