Javascript 如何将一个流按顺序拆分为多个流

Javascript 如何将一个流按顺序拆分为多个流,javascript,rxjs,rxjs6,Javascript,Rxjs,Rxjs6,使用rxjs6 我有一个任意数据流: [in] -> a, b, c, d, e, f, g, h, i, .... 我想以交替顺序将其拆分为固定数量的N个流(在本例中为3个输出流): 或者更简单地说: a => stream1 b => stream2 c => stream3 d => stream1 e => stream2 f => stream3 g => stream1 h => stream2 i => stream3

使用rxjs6

我有一个任意数据流:

[in] -> a, b, c, d, e, f, g, h, i, ....
我想以交替顺序将其拆分为固定数量的N个流(在本例中为3个输出流):

或者更简单地说:

a => stream1
b => stream2
c => stream3
d => stream1
e => stream2
f => stream3
g => stream1
h => stream2
i => stream3

有人知道我是如何做到这一点的吗?

您可以迭代
N
并在每次迭代时使用
分区将流一分为二:

import { from, merge } from 'rxjs';
import { partition, map } from 'rxjs/operators';

const source = from(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']);

function split(source, n) {
  const streams = [];
  let toSplit = source;
  for (let k = n; k > 0; --k) {
    const [stream, rest] = toSplit.pipe(
      partition((_, i) => i % k === 0)
    );
    streams.push(stream);
    toSplit = rest;
  }
  return streams;
}

const obs = split(source, 3);

const subscribe = merge(
  obs[0].pipe(map(val => `1: ${val}`)),
  obs[1].pipe(map(val => `2: ${val}`)),
  obs[2].pipe(map(val => `3: ${val}`)),
).subscribe(val => console.log(val));

您可以迭代
N
并在每次迭代时使用
分区将流一分为二:

import { from, merge } from 'rxjs';
import { partition, map } from 'rxjs/operators';

const source = from(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']);

function split(source, n) {
  const streams = [];
  let toSplit = source;
  for (let k = n; k > 0; --k) {
    const [stream, rest] = toSplit.pipe(
      partition((_, i) => i % k === 0)
    );
    streams.push(stream);
    toSplit = rest;
  }
  return streams;
}

const obs = split(source, 3);

const subscribe = merge(
  obs[0].pipe(map(val => `1: ${val}`)),
  obs[1].pipe(map(val => `2: ${val}`)),
  obs[2].pipe(map(val => `3: ${val}`)),
).subscribe(val => console.log(val));

因此,您希望有一个可观测对象发射其他可观测对象(如使用
groupBy
操作符)或只有三个不同的可观测对象?发射到其他三个固定可观测对象,实际上是它们的一个数组,应该提前创建,基本上是当它们的数量(N)为是先确定的,所以您希望有一个可观测对象发射其他可观测对象(如使用
groupBy
运算符)还是只有三个不同的可观测对象?对于其他三个固定可观测对象,实际上是它们的数组,应该提前创建,基本上是在第一次确定它们的数量(N)时谢谢,我有种感觉是这样的,只是不知道你可以在分区回调中得到索引。我想这是实现这一目标的唯一合理途径?@user2765977,不客气。我认为这是最简单的方法。谢谢你,我感觉会是这样,只是不知道你可以在分区回调中得到索引。我想这是实现这一目标的唯一合理途径?@user2765977,不客气。我认为这是最直接的方法。