javascript - 如果在 rxjs 中没有按顺序重复 3 次,如何跳过 0 值

标签 javascript rxjs

我有以下数据流来了

1 > 4 > 0 > 3 > 1 > 0 > 0 > 0 > 1 > 2 > 0 > 0 > 0 > 0 > 0 > 0

我希望 0 仅在连续重复 3 次或更多时才发出,因此预期结果将类似于

1 > 4 > 3 > 1 > 0 > 1 > 2 > 0

我如何在 rxjs 中做到这一点?

最佳答案

您可能希望按照以下示例实现它:

const { from } = rxjs;
const { scan, filter, map} = rxjs.operators;


const input = [
    1, 4, 0, 3, 1, 0, 0, 0, 
    1, 2, 0, 0, 0, 0, 0, 0,
    2, 0, 2, 4, 0, 0, 3, 9,
    4, 3, 0, 0, 0, 0, 0, 0,
];

from(input).pipe(
    scan(({ counter }, current) => {

        if (current === 0) return { current, counter: ++counter, emit: counter == 3 }
        else return { current, counter: 0, emit: true };

    }, { emit: false, counter: 0, current: undefined }),

    filter(x => x.emit), 

    map(x => x.current) 
)
.subscribe(console.log)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.6.2/rxjs.umd.min.js"></script>

关于javascript - 如果在 rxjs 中没有按顺序重复 3 次,如何跳过 0 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64201130/

相关文章:

javascript - 如何使用 Javascript 访问网络摄像头

javascript - 如何检查是否设置了另一个对象内的对象内的变量(js)?

javascript - 解码 base64 字符串在 JS 中不起作用,适用于 Linux 的 base64

javascript - Mapbox gl & directions API 调用 - 不显示路线

javascript - 如何在事件上使用带有 Socket.IO 的 RxJs

javascript - 如何让浏览器请求新的js和css文件

javascript - 为什么可观察管道在组件中不起作用?

Angular 4 - 链接订阅

javascript - 如何创建一个 Observable 并同时将该 Observable 中的值存储到另一个 Observable 中?

javascript - 嵌套订阅并需要所有值作为正文传递给 API - Angular 6 RxJS