应用过滤器后,通过Parent和Children类定义条件

时间:2019-11-28 16:00:04

标签: angular typescript rxjs angular8

在Angular 8中,我有一个可观察的物体:

let parents: Observable<Parent[]>;

其中ParentChild类是:

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

我该怎么做?地图无法完成?

2 个答案:

答案 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))