Angular2:获取从数组“ |”中选择单个对象的管道

问题描述

我在Angular中有一个复杂的可观察对象(由秋田提供,我无法更改),它是|版本的Dinosaur对象数组的可观察对象,单个Dinosaur对象,或未定义:

import { QueryEntity } from "@datorama/akita";

export class DinosaurQuery extends QueryEntity<DinosaurState,Dinosaur> {
  activeDinosaurs$ = this.selectActive(); // Type: Observable<Dinosaur[]> | Observable<Dinosaur | undefined>

  constructor(protected store: DinosauRSStore) {
    super(store);
  }
}

作为一个观察对象,我想从中得到的是单个对象,或者是数组中的第一个对象。或未定义(如果没有)。

export class DinosaurSelection {
    // I want singleSelectedDinosaur$ to be of type: Observable<Dinosaur | undefined>
    singleSelectedDinosaur$ = this.dinosaurQuery.activeDinosaurs$.pipe(???);

    constructor(protected dinosaurQuery: DinosaurQuery) {}

}

我想必须有一些管道可以执行此操作,但是我找不到可以同时作用于对象的|和该对象的数组的适当内容。 (或者也许不能用管道来完成,但是换一种方式也可以。)

解决方法

只需使用“ pipe(map)”来转换数组是否为数组

singleSelectedDinosaur$ = this.dinosaurQuery.activeDinosaurs$.pipe(
    map((res:any)=>{
       if (res && Array.isArray(res)) //if res and is array
          return res[0]   //return the first element
       return res;      //else resut res
    }
));