#rxjs
#rxjs
Вопрос:
У меня есть Observable<Project>
, который возвращает массив объектов. Мне нужно отфильтровать этот массив на основе Observable<boolean>
построенного из запроса с использованием идентификаторов объектов.
Что-то в строках приведенного ниже кода, но мне нужны фактические объекты в массиве, а не массив логических значений, которые я в настоящее время сопоставил с ними. Я предполагаю, что что-то в строках zip-файла, которое я мог бы использовать после того, как исходное наблюдаемое было отправлено для объединения обоих значений, чтобы я мог использовать их в фильтре.
this.projectService.getCurrentUserProjects().pipe(
mergeAll(),
mergeMap((project) => this.getProjectConditions(project.id)),
filter((condition) => condition),
toArray()
)
Мои текущие выводы здесь:
- Способ для меня получить доступ к значениям, передаваемым mergeAll после слоя фильтра, для меня, чтобы собрать его в массив.
- Способ для меня сделать concatMap, который возвращает observable с обоими значениями, чтобы я мог использовать его на уровне фильтра.
- Какой-то оператор фильтра, который принимает наблюдаемое.
Ответ №1:
Рассмотрите возможность использования внутреннего map
возвращающего оба значения (данные и условие) в виде массива, как показано ниже:
this.projectService.getCurrentUserProjects().pipe(
mergeAll(),
mergeMap((project) => this.getProjectConditions(project.id).pipe(map(condition => [project, condition]))),
filter(([,condition]) => condition), // <= only destruct second parameter
map(([project]) => project), // <= only destruct first parameter
toArray()
)