我使用 angular 服务 HTTP 得到一个带有节点子节点的 json 。
{
"id":"CAT0001",
"parentId":null,
"label":"Internal Cause",
"level":1,
"enabled":true,
"children":[
{
"id":"CAT0003",
"parentId":"CAT0001",
"label":"Internal Deliberate Act",
"level":2,
"enabled":true,
"children":[ ]
},
{
"id":"CAT0004",
"parentId":"CAT0001",
"label":"Human Error",
"level":2,
"enabled":true,
"children":[
{
"id":"CAT0005",
"parentId":"CAT0004",
"label":"System input error",
"level":3,
"enabled":true,
"children":[
]
}
我想在我的 observable 上使用 .filter 只保留启用 === true 的节点
我想我需要创建一个递归函数或使用一个好的运算符 rxjs
目前我成功过滤了第一级
getTreeData(url:string) {
return this.httpService.get(url).map(data => data.filter(data => data.enabled === true));
}
有人可以帮助我吗?
这不是一个真正的 rxjs 问题,因为它是您想要过滤掉的结果对象的子对象。
我创建了这个 stackblitz 来帮助可视化问题https://stackblitz.com/edit/recursive-tree?file=app/tree.service.ts
通过执行递归打字稿函数解决主要问题的地方。
export interface TreeNode {
id: string;
parentId?: string;
label: string;
level: number;
enabled: boolean;
children: TreeNode[];
}
filterActiveNodes(nodes: TreeNode[]) {
const filteredNodes = nodes.filter(n => n.enabled);
// filter children
for (const n of filteredNodes) {
n.children = this.filterActiveNodes(n.children);
}
return filteredNodes;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句