Simple filter on array of RXJS Observable

后端 未结 4 853
独厮守ぢ
独厮守ぢ 2020-12-12 19:21

I am starting my project with Angular2 and the developers seem to recommend RXJS Observable instead of Promises.

I have achieved to retrieve a list of elements (epic

4条回答
  •  北荒
    北荒 (楼主)
    2020-12-12 19:34

    You can do this using the flatMap and filter methods of Observable instead of the JS array filter method in map. Something like:

    this.getEpics() 
        .flatMap((data) => data.epics) // [{id: 1}, {id: 4}, {id: 3}, ..., {id: N}]
        .filter((epic) => epic.id === id) // checks {id: 1}, then {id: 2}, etc
        .subscribe((result) => ...); // do something epic!!!
    

    flatMap will provide singular indices for filtering and then you can get on with whatever happens next with the results.

    If TypeScript throws a error indicating you can't compare a string and a number regardless of your use of == in the filter just add a + before epic.id in the filter, per the Angular docs:

        .flatMap(...)
        .filter((epic) => +epic.id === id) // checks {id: 1}, then {id: 2}, etc
        .subscribe(...)
    

    Example:

    https://stackblitz.com/edit/angular-9ehje5?file=src%2Fapp%2Fapp.component.ts

提交回复
热议问题