数组流转换为流运算符数组
Stream of arrays into array of streams operator
在 Rx.js 中,如何将数组流转换为流数组,例如我有以下流:['0a','0b'], ['1a','1b' ],['2a','2b','2c'] 我想获取以下流:
0a---1a---2a--->
0b---1b---2b--->
2c--->
是否有任何运算符可以做类似的事情,或者我应该从头开始写一个?
您可以使用现有的运算符相对轻松地实现它。
您想要实现的与此处描述的非常相似:
它建议两种方式:
使用 Rx.Observable.zip
运算符(将一个可观察对象数组作为参数并发出一个数组流,其索引 n 处的元素是第 n 个可观察对象发出的第 x 个值)
然而,在您的示例中应用的该解决方案将在 1a,1b
处停止,因为一旦其中一个可观察对象完成,生成的可观察对象就会完成。
通过使用虚拟值完成并应用 Rx.Observable.zip
运算符
来扩展您的数组,使它们具有相同的长度
在这两个选项中:
- 如果你删除最后一行,
.concatMap....
你会得到一个像 [0a,0b], [1a,1b], [2a,2b,2c]
这样的数组流,你可以从中轻松地按索引映射(.map(function(array){return array[N];})
会得到你 [Na,Nb...]
) 获取你想要的流。
- 或者您可以保留完全相同的代码并添加
.filter(function(value,index){return index % N == I})
,其中 N
是流的数量,I
是您想要的流,即具有值的流(Ia,Ib...)
关于 zip
运算符的文档 > http://reactivex.io/documentation/operators/zip.html https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/zip.md、
像这样的东西应该可以工作
stream.
flatMap(array =>
Rx.Observable.from(
array.map((obj, i) => {index: i, ...obj})
)
).groupBy(x => x.index, ).
subscribe(x =>
x.map((x,i) => subscribe(x))
)
在 Rx.js 中,如何将数组流转换为流数组,例如我有以下流:['0a','0b'], ['1a','1b' ],['2a','2b','2c'] 我想获取以下流:
0a---1a---2a--->
0b---1b---2b--->
2c--->
是否有任何运算符可以做类似的事情,或者我应该从头开始写一个?
您可以使用现有的运算符相对轻松地实现它。
您想要实现的与此处描述的非常相似:
它建议两种方式:
使用
Rx.Observable.zip
运算符(将一个可观察对象数组作为参数并发出一个数组流,其索引 n 处的元素是第 n 个可观察对象发出的第 x 个值)然而,在您的示例中应用的该解决方案将在
1a,1b
处停止,因为一旦其中一个可观察对象完成,生成的可观察对象就会完成。通过使用虚拟值完成并应用
Rx.Observable.zip
运算符 来扩展您的数组,使它们具有相同的长度
在这两个选项中:
- 如果你删除最后一行,
.concatMap....
你会得到一个像[0a,0b], [1a,1b], [2a,2b,2c]
这样的数组流,你可以从中轻松地按索引映射(.map(function(array){return array[N];})
会得到你[Na,Nb...]
) 获取你想要的流。 - 或者您可以保留完全相同的代码并添加
.filter(function(value,index){return index % N == I})
,其中N
是流的数量,I
是您想要的流,即具有值的流(Ia,Ib...)
关于 zip
运算符的文档 > http://reactivex.io/documentation/operators/zip.html https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/zip.md、
像这样的东西应该可以工作
stream.
flatMap(array =>
Rx.Observable.from(
array.map((obj, i) => {index: i, ...obj})
)
).groupBy(x => x.index, ).
subscribe(x =>
x.map((x,i) => subscribe(x))
)