【问题标题】:pick last item of repeated list in rxjs在 rxjs 中选择重复列表的最后一项
【发布时间】:2018-09-02 15:08:36
【问题描述】:

我正在从一个 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 - -

【问题讨论】:

  • 我认为您的预期结果模棱两可。您无法知道输入是一个相同值系列的最后一个输入。当其他价值出现时,我可以知道它。例如,在1 - 1 - 1 - 2 的情况下,当2 出现时,您可以知道第三个11s 的最后一个输入。那么,当2 出现时,您期望得到1 的输出吗?

标签: javascript sockets merge rxjs distinct


【解决方案1】:

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

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);

【讨论】:

    猜你喜欢
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    相关资源
    最近更新 更多