在Angular 8中,我有一个可观察的物体:
let parents: Observable<Parent[]>;
其中Parent
和Child
类是:
class Parent {
id: number;
name: string;
children: Child[];
}
class Child {
id: number;
name: string;
}
我需要在所有父母的孩子中找到Child
,值id
为1。
然后,我需要使用该Child
及其Parent
定义一个条件...我尝试过:
parents.pipe(
map(parents => parents.map(parent => parent.children)),
map(children => children.find(child => child.id == 1))
map(child => Test Condition with resulting Child and its Parent
我遇到的第一个问题是children
中的map(children =>
类型为Child[][]
而不是Child[]
,因此表达式child.id
失败,因为子项{{ 1}}。
在最后一张地图中,我需要拥有Child[]
以及它的Child
,以便我可以创建条件并返回Parent
我该怎么做?地图无法完成?
答案 0 :(得分:-1)
尝试一下:
parents.pipe(
map(parents => parents.map(parent => parent.children).flat()),
map(children => children.find(child => child.id == 1))
map(child => Test Condition with resulting Child and its Parent
答案 1 :(得分:-1)
您需要使用flatMap(https://rxjs-dev.firebaseapp.com/api/operators/flatMap)。 使用flatMap,您可以将所有子级列表加入一个较长的列表中,然后在后续步骤中进行处理。
我认为这应该可行:
const childrenWithId1: Children[] = parents.pipe(
flatMap(parents => parents),
flatMap(parent => parent.children),
filter(child => child.id == 1))