使用可观测过滤器函数过滤rxjs可观测阵列的最佳方法

使用可观测过滤器函数过滤rxjs可观测阵列的最佳方法,rxjs,observable,Rxjs,Observable,考虑以下示例: 我有一个不完整的rxjs Observable,它为我提供了一个数字数组(例如,([1,2,3,4,5])),还有一个自定义的过滤函数,它为每个数字返回一个可观察的布尔值(也是不完整的)(表示该数字是否应包含在结果中) 我的问题:应用此过滤器的最佳运算符组合是什么 注意:使用toArray的解决方案(如中所述)对我不起作用:我的筛选函数返回的可观测值永远不会完成,并且由于明显的原因toArray只能处理完成的流 到目前为止,我用scan操作符找到了这个怪物: 我相信这是可行的,但

考虑以下示例:

我有一个不完整的rxjs Observable,它为我提供了一个数字数组(例如,
([1,2,3,4,5])
),还有一个自定义的过滤函数,它为每个数字返回一个可观察的布尔值(也是不完整的)(表示该数字是否应包含在结果中)

我的问题:应用此过滤器的最佳运算符组合是什么

注意:使用
toArray
的解决方案(如中所述)对我不起作用:我的筛选函数返回的可观测值永远不会完成,并且由于明显的原因
toArray
只能处理完成的流

到目前为止,我用
scan
操作符找到了这个怪物:


我相信这是可行的,但我忍不住想,一定有更简单的方法来实现这一点 我认为这应该行得通

const filtered$=remoteSource$.pipe(
//如果输入了新的源值,则切换到这些值并放弃当前值
开关映射(nums=>{
//一组可观察对象,如果通过过滤器或未定义,则每个可观察对象都会发出一个数字
常量checkedNumbers=nums.map(num=>numFilter$(num).pipe(
映射(isValid=>isValid?num:未定义)
));
//把这些观察结果结合起来
返回组合测试(选中的数字);
}),
//过滤掉未定义的值,即未通过上述过滤器的数字
映射(checkedNumers=>checkedNumers.filter(num=>num!==undefined)),
);

你能更具体地说你想做什么吗?我不知道什么是返回可观察的未完成过滤函数,或者stackblitz代码支持做什么。是的,我会尝试重新表述我的问题,但这是一个复杂的设置。我所说的“不完整的可观察对象”是指从不在内部调用
complete()
的可观察对象。(例如,
interval(100)
创建了这样一个用于测试的可观察对象。哇-太快了!非常感谢。我没有想过在这个设置中使用
switchMap
。我只发现了一个小问题,但这实际上不是我在问题中解释的:当可观察数组中没有值时,我还需要过滤器发出(
remoteSource$
)。我只需要在
开关映射的顶部添加一个
if(nums.length==0){return of([]);}