如何获得从反应流发出的最后两个项目的滚动缓冲区?

Bre*_*dan 2 operators reactive-programming rxjs

我有一个发出 numbers 的流x。我想要的是dx(在 x 中的差异)所以我需要一个滚动缓冲区,它可以发出x_nx_(n-1)所以我可以映射到dx = x_n - x_(n-1). 在大理石图中,这看起来像......

SOURCE --A------B------C--------D------F--G-----

RESULT ---------AB-----BC-------CD-----DF-FG----
Run Code Online (Sandbox Code Playgroud)

这对于滚动平均线等其他操作非常方便。

我检查了操作员文档,但似乎找不到任何类似的东西。sample有点接近,但取决于时间。buffer也很接近,但它严格地将值排队,缓冲区之间没有重叠。

我正在使用 RxJS

Bre*_*dan 5

RXJS 5

RxJS 的bufferCount操作符如下所示......

observable = Rx.Observable.from(["A", "B", "C", "D", "E", "F"])

bufferSize = 2
overlap = 1
observable.bufferCount(bufferSize, overlap)
    .subscribe(vals => console.log(vals));

// Results in,
//
// ["A", "B"]
// ["B", "C"]
// ...
Run Code Online (Sandbox Code Playgroud)

overlap实际上是采样频率,因此例如在上述情况下,如果overlap = 2那么我们将获得正常buffer行为。