问题描述
我在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
}
));