Angular2:获取从数组`|`中选择单个对象的管道
Angular2: get a pipe that selects from an array `|` a single object
我在 Angular 中有一些复杂的 Observable(感谢使用 Akita,我无法更改它),它是一个 |
的 Observable 数组 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);
}
}
作为一个可观察对象,我想从中得到的是单个对象,或数组中的第一个对象,以防它是一个数组。或者undefined,如果有none.
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
}
));
我在 Angular 中有一些复杂的 Observable(感谢使用 Akita,我无法更改它),它是一个 |
的 Observable 数组 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);
}
}
作为一个可观察对象,我想从中得到的是单个对象,或数组中的第一个对象,以防它是一个数组。或者undefined,如果有none.
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
}
));