[英]How filter a json with observable rxJS
我通过角度服务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":[
]
}
我想在我的观察对象上使用.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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.