gpt4 book ai didi

javascript - 如何使用 observable rxJS 过滤 json

转载 作者:行者123 更新时间:2023-12-03 02:08:15 25 4
gpt4 key购买 nike

我使用 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":[

]
}

我想在我的可观察对象上使用 .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

主要问题是通过执行递归 typescript 函数来解决的。

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;
}

关于javascript - 如何使用 observable rxJS 过滤 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49696739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com