codecamp

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依赖于一个 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' }

也可以看看

RxJS dematerialize
RxJS distinctUntilChanged
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

RxJS operators

RxJS fetch

RxJS testing

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }