是否存在选择时间范围内最大值的解盎司版本?(RxJS)

是否存在选择时间范围内最大值的解盎司版本?(RxJS),rxjs,reactivex,debounce,Rxjs,Reactivex,Debounce,基本上只是标题。我合并了两条流,但它们都每秒发射一次,我只想取最大值。我的合并流每秒有两个值,但我当前的去盎司方法不会注意哪个值更大 有什么解决办法吗?(即,将函数传递到解盎司的方法) 这是我的密码: var a = [11, 12, 14, 15, 18, 20]; var b = [1, 2, 8, 16, 43, 100]; const first = interval(1000).pipe( take(a.length), map(i => a[i]) ); const

基本上只是标题。我合并了两条流,但它们都每秒发射一次,我只想取最大值。我的合并流每秒有两个值,但我当前的去盎司方法不会注意哪个值更大

有什么解决办法吗?(即,将函数传递到解盎司的方法)

这是我的密码:

var a = [11, 12, 14, 15, 18, 20];
var b = [1, 2, 8, 16, 43, 100];

const first = interval(1000).pipe(
  take(a.length),
  map(i => a[i])
);

const second = interval(1000).pipe(
  take(b.length),
  map(i => b[i])
);

const example = first.pipe(merge(second));

const example2 = example.pipe(
  debounce(() => interval(1))
);

我试过使用scan和max,但它们似乎没有我想要的功能。

我真的不确定你到底想要什么,因为你的描述不是很清楚。所以,我给你们两种可能性,看看其中一种是否成立

第一种方法是将两个流组合在一起,并仅发射每个流中的最大值。这不需要任何时间,也不像去盎司。它只是将源观测值配对

zip(first, second).pipe(
  map(([x, y]) => Math.max(x, y))
).subscribe(console.log);
第二种方法是将值缓冲一秒钟,然后发出最大的缓冲值。这种方法不会将源流配对。它不在乎有多少条流,也不在乎它们发出的频率。一秒钟可以有12个值,下一秒钟可以有1个值。它只会释放出最大的能量

merge(first, second).pipe(
  bufferTime(1000),
  filter(buffer => buffer.length > 0),
  map(buffer => Math.max(...buffer))
).subscribe(console.log);
这两种方法做的事情非常不同,但对于您的特定情况,可能有类似的输出。第一个更接近您的问题描述,第二个更接近您的标题描述


另外,这里有一个更实用的方法来创建第一个和第二个流

const first = zip(
  from([11, 12, 14, 15, 18, 20]),
  interval(1000),
  (x, y) => x
);

const second = zip(
  from([1, 2, 8, 16, 43, 100]),
  interval(1000),
  (x, y) => x
); 
这里的附加值是,不需要通过从其闭包中读取变量来修改间隔。在这里,它可以保持“纯”,因为一旦阵列流完成,zip将取消订阅