В неасинхронном коде я делаю следующее:
const x = [
...(isY ? [Y]: []),
...(isZ ? [Z] : [])
];
Как бы вы элегантно написали эту структуру, если isY и isZ — это Observables<boolean>, а x — это Observable<Object[]>.
Я могу сделать это со всеми видами отображений, но ничто не выглядит чистым или элегантным.



Оператор combineLatest лучше всего использовать, когда у вас есть несколько долгоживущих observables, которые полагаются друг на друга для некоторых вычислений или определений.
Имейте в виду, что combineLatest не будет выдавать начальное значение, пока каждая наблюдаемая не выдаст хотя бы одно значение.
Вы можете посмотреть объяснение для combineLatest.
const x: Observable<any[]> = combineLatest(isY$, isZ$).pipe(
map([isY, isZ] => {
return [
...(isY ? [Y]: []),
...(isZ ? [Z]: [])
]
})
)
Обновлено: Вы также можете использовать функцию проекта CombineLatest, так что это может быть даже короче, выполнив
const x: Observable<any[]> = combineLatest(isY$, isZ$, (isY, isZ) => [
...(isY ? [Y]: []),
...(isZ ? [Z]: [])
])