我想采取一个Observable< T []>并将其转换为Observable< T>这样来自Observable< T []>的每个数组。然后分解,然后通过Observable< T>单独发出数组的各个元素。
这样做有标准的操作员吗?我已经四处寻找但没有找到任何东西。感谢。
在指向concatMap / flatMap的方向后,我提出了以下一般解决方案:
var source: Observable<T[]>;
...
var splitSource = source.flatMap<T>((x:T[]) => { return Rx.Observable.fromArray(x); });
答案 0 :(得分:6)
您可以像这样使用$_POST
:
concatMap
这是有效的,因为function identity (x) {return x}
var obs_of_array$ = Rx.Observable.return(['1','2','you got it'])
.concatMap(identity)
也接受数组(和observables和promises)作为您作为参数传递的函数选择器的返回值。 Jsbin here,文档here
因此,作为参数传递的数组成为选择器函数的返回值,然后由concatMap
运算符展平,同时遵守数组的顺序。
答案 1 :(得分:0)
我也一直在努力将Observable<T[]>
转换为Observable<T>
。
我发现flatMap()
完成了自己的工作,我认为11个月前提出这个问题并非如此。
为了说明,在@ user3743222回答的jsfiddle中,您可以进行此更改并获得相同的输出:
//.concatMap(identity)
.flatMap(theArray=>theArray)
我使用this和toArray()
运算符在管道中执行set操作,例如对observable进行排序。
let sorted$ = source$.toArray().flatMap(theList=> theList.sort(this.myComparer) )
输出为Observable<T>
。 ( N.B 在固定数组的上下文中工作,不确定连续生成源会发生什么)