用RXJS取N个相同的数字?

Roy*_*mir 0 javascript rxjs

我有以一定速率发出值的代码:

let source = zip (
             interval(150) ,
              from ([0,1,1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]) 
            )  .subscribe(a=>console.log(a))
Run Code Online (Sandbox Code Playgroud)

我想找到值 - 在N值已经确定之后(这意味着 - N重复相同的值).

例如,如果N=5,那么我需要第一次找到它产生5个相同的值.(并发出该值.)

题:

如何检测N个相同的值并发出该值(并完成流)?

所以这里的期望值是3,因为它是5个相同值的第一个系列:

在此输入图像描述

在线演示

mar*_*tin 5

您可以使用bufferCount(N, 1)这里1告诉bufferCount所有的排放,这意味着它会发出的数组后发射其缓冲区N项目.然后检查所有这些是否相同和完整.

const N = 5

from ([0,1,1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]) 
  .pipe(
    bufferCount(N, 1),
    filter(buffer => buffer.length === N && buffer.every(i => i === buffer[0])),
    take(1),
    map(buffer => buffer[0]),
  )
  .subscribe(console.log);
Run Code Online (Sandbox Code Playgroud)

现场演示:https://stackblitz.com/edit/rxjs6-demo-xzb5so?file = index.ts