过滤并从BehaviorSubject获取项目

时间:2019-11-27 17:55:25

标签: angular typescript rxjs angular8

我有一个BehaviorSubject,可以使用HttpClient调用API:

  let parents = new BehaviorSubject<Parent[]>([]);

   this.httpClient.get<Parent[]>('parents-and-children').subscribe(result => {
     parents.next(result);
   });

家长和儿童班是:

class Parent {
  id: number;
  name: string;
  childrens: Children[];
}

class Children {
  id: number;
  name: string;
}

我希望执行以下操作:

  1. 给出parentId值,则从BehaviourSubject获取具有该ID的父级。

  2. 给出一个childrenId值,通过查看所有父母的孩子来获得具有该id的孩子。

    let parentId = 1;
    parents.pipe( ??
    
    let childrenId = 2;
    parents.pipe( ??
    

我一直在尝试管道,但是我不确定如何过滤项目...

1 个答案:

答案 0 :(得分:3)

let parentId = 1;
let childrenId = 2;

parents.pipe(
    map(parnts => parnts.find(p => p.id === parentId))
).subscribe(parent => console.log(parent));

parents.pipe(
    map(parnts => [].concat(...parnts.map(p => p.childrens))),
    map(childrens => childrens.find(ch => ch.id === childrenId))
).subscribe(child => console.log(child));