#javascript #arrays #rxjs
#javascript #массивы #rxjs
Вопрос:
Кажется, у людей возникают проблемы только с превращением массива наблюдаемых в наблюдаемое из массива, а не наоборот.
Итак, учитывая наблюдаемое
Observable<Result[]>
как мне перейти от
Observable<Result[]> to Observable<Result>[] ?
Проблема связана с тем, что я получил наблюдаемое из элементов
items$: Observable<Item[]>
с
Item: {
value: number,
...
};
где value
могут приниматься дискретные значения, скажем
values = [1, 2, 3]
Мне нужно создать наблюдаемую для каждого значения, поскольку каждое значение передает другой компонент.
Итак, я пошел дальше и выполнил следующее сопоставление
items$.map(items => values.map(value =>
({ value, items: items.filter(item => item.value === value) }))
что дает
Observable<{ value: number, items: Item[] }[]>
Однако для того, чтобы присвоить каждое значение его компоненту, мне нужно
Observable<{ value: number, items: Item[] }>[]
Как мне туда попасть?
Комментарии:
1. Я очень смущен тем, что такое «z» и «a».
2. Извините, у меня было ощущение, что это было плохо сформулировано, перефразировал вопрос и надеюсь, что теперь это имеет больше смысла.
3. Если бы вы хотели создать наблюдаемое, которое выдает наблюдаемое, это было бы легко. Мне кажется, что вы хотите, чтобы вам действительно нужно было собрать все значения из наблюдаемого в массив, и когда он завершится, вам нужно сделать наблюдаемое из каждого элемента массива. Я прав?
4. Не уверен, правильно ли я понимаю ваш случай, но
.flatMap(arr => Rx.Observable.from(arr))
, возможно, это то, что вы ищете: plnkr.co/edit/GMLQxmZ8o2KTd6lbdzHm?p=preview .
Ответ №1:
Просто небольшое изменение в вашем коде:
values.map(value =>
items$.map(items =>
({ value, items: items.filter(item => item.value === value) })
)
)
map
оператор фактически создает новую наблюдаемую
Комментарии:
1. Пожалуйста, обратите внимание — ваш ответ не отвечает на исходный вопрос
How to turn an observable of an array into an array of observables
, даже если он решает проблему OP. Вы сопоставляете массив с массивом наблюдаемых, но не преобразуете наблюдаемое из массива в массив наблюдаемых.