我有以下数据流来了
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/