我有一个包含项目列表的 Observable
。每个项目都有一个 selected$
(布尔值)可观察对象。我需要过滤掉具有非真值的项目。
这是我的解决方案,感觉有点麻烦,但确实可以。有没有更好的解决方案?
interface ICarrier {
readonly id: number;
readonly selected$: Observable<boolean>;
}
const allCarriers$ = of<readonly ICarrier[]>([]); // Placeholder value!
const selectedCarriers$ = allCarriers$.pipe(
switchMap(carriers => {
return combineLatest(carriers.map(carrier => carrier.selected$.pipe(
map(selected => selected ? carrier : null),
))).pipe(
// Prevent multiple filtering when multiple values changes at once.
debounceTime(0),
// filter out null values
map(carriers => carriers.filter((carrier): carrier is ICarreir => !!carrier)),
);
}),
);