首页 > 解决方案 > RXJS 缓冲区可观察到最大和最小大小

问题描述

我在 rxjs 中很菜鸟。我想要一个基本上从小尺寸(minSize)开始的缓冲区,直到它达到某个极限maxSize。

buffer(minSize, maxSize, startEvery)

所以它应该发出例如(rxjs 6 语法)。

source(1,2,3,4,5,6,7,8).pipe(buffer(2, 4, 1))
.subscribe( res => console.log(res));

-> [1,2]
-> [1,2,3]
-> [1,2,3,4]
-> [2,3,4,5]
-> [3,4,5,6] 
and so on

标签: javascriptrxjsobservablerxjs6

解决方案


您可以使用scan

of(1,2,3,4,5,6,7,8).pipe(
    scan((acc, cur) => [...acc, cur].slice(-4), [])
).subscribe(arr => console.log(arr))

这将输出:

[1]
[1,2]
[1,2,3]
[1,2,3,4]
[2,3,4,5]
[3,4,5,6]

如果你想摆脱[1]使用scan(), skip(1)


推荐阅读