【问题标题】:Filter and get items from BehaviorSubject从 BehaviorSubject 过滤和获取项目
【发布时间】:2019-11-27 17:55:25
【问题描述】:

我有一个 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( ??
    

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

【问题讨论】:

标签: angular typescript rxjs angular8


【解决方案1】:
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));

【讨论】:

  • id 在 ch.id 中未被识别为属性,因为 ch 是一个双精度数组
  • 使用 [].concat @MiguelMoura 修复了答案
猜你喜欢
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
相关资源
最近更新 更多