RxJS distinct
返回一个 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
依赖于一个 Array
和 indexOf
下 引擎盖,因此当检查更多的值以区别时,性能将下降。 即使在较新的浏览器中,长期运行 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' }