在rxjs中选择重复列表的最后一项

问题描述 投票:0回答:1

我从Socket获得了一堆流,并希望选择最新的项目。

我知道distinctUntilChanged正在挑选第一个项目,但我需要以某种方式反转这个功能。

总之,我想通过rxjs来做到这一点:

In:  1 - 1 - 1 - 2 - 2 - 3 - 3 - 1 - 1 - 1 - 2 - 2 - 2 - 1 - 2 - 2 - 3 - 3
Out: - - - - 1 - - - 2 - - - 3 - - - - - 1 - - - - - 2 - 1 - - - 2 - 3 - -
javascript sockets merge rxjs distinct
1个回答
0
投票

我们可以在更改后发出最后一个值:

In:  1 - 1 - 1 - 2 - 2 - 3 - 3 - 1 - 1 - 1 - 2 - 2 - 2 - 1 - 2 - 2 - 3 - 3
Out: - - - - - - 1 - - - 2 - - - 3 - - - - - 1 - - - - - 2 - 1 - - - 2 - 3

import { pairwise, take, filter, map, merge, last } from 'rxjs/operators';
import { interval, from } from 'rxjs';

const stream$ = from([1, 1, 1, 2, 2, 3, 3, 1, 1, 1, 2, 2, 2, 1, 2, 2, 3, 3]);

stream$
  .pipe(
    pairwise(),
    filter(([prev, cur]) => prev !== cur),
    map(([prev, cur]) => prev),
    merge(stream$.pipe(last()))
  )
  .subscribe(console.log);
© www.soinside.com 2019 - 2024. All rights reserved.