Какой элегантный способ написать CombineLatest с условными аргументами?

В неасинхронном коде я делаю следующее:

    const x = [
        ...(isY ? [Y]: []),
        ...(isZ ? [Z] : [])
    ];

Как бы вы элегантно написали эту структуру, если isY и isZ — это Observables<boolean>, а x — это Observable<Object[]>.

Я могу сделать это со всеми видами отображений, но ничто не выглядит чистым или элегантным.

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
164
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оператор 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]: []) 
])

Другие вопросы по теме