RxJS distinct

2020-10-14 10:06 更新

返回一个 Observable,它发出源 Observable 发出的所有项目,这些项目与以前的项目相比是不同的。

distinct<T, K>(keySelector?: (value: T) => K, flushes?: Observable<any>):MonoTypeOperatorFunction<T>

参量

keySelector 可选的。 默认值为 undefined。 可选功能,用于选择您要检查为不同的值。
flushes 可选的。 默认值为 undefined。         可选 Observable,用于刷新运算符的内部HashSet。

returns

MonoTypeOperatorFunction<T>:一个 Observable,它从源 Observable 发出具有不同值的项目。

描述

如果提供了 keySelector 函数,则它将可观察到的源中的每个值投影到一个新值中 检查与先前预测的值是否相等。 如果未提供 keySelector 函数,它将使用来自 可以直接通过对先前值的相等性检查来观察源。

在支持的 JavaScript 运行时中 Set,此运算符将使用 Set来提高非重复值检查的性能。

在其他运行时,该运营商将使用一个最小的实现 Set依赖于一个 ArrayindexOf下 引擎盖,因此当检查更多的值以区别时,性能将下降。 即使在较新的浏览器中,长期运行 distinct 使用可能会导致内存泄漏。 为了在某些情况下缓解这种情况, 一个可选 flushes还提供了 参数,以便 内部 Set可以被“清除”,基本上清除了其价值。

例子

一个简单的数字例子

import { of } from 'rxjs';
import { distinct } from 'rxjs/operators';


of(1, 1, 2, 2, 2, 1, 2, 3, 4, 3, 2, 1).pipe(
    distinct(),
  )
  .subscribe(x => console.log(x)); // 1, 2, 3, 4

使用 keySelector 函数的示例

import { of } from 'rxjs';
import { distinct } from 'rxjs/operators';


interface Person {
   age: number,
   name: string
}


of<Person>(
    { age: 4, name: 'Foo'},
    { age: 7, name: 'Bar'},
    { age: 5, name: 'Foo'},
  ).pipe(
    distinct((p: Person) => p.name),
  )
  .subscribe(x => console.log(x));


// displays:
// { age: 4, name: 'Foo' }
// { age: 7, name: 'Bar' }

也可以看看

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号