RxJS distinct

2020-10-14 10:06 更新

返回一個(gè) Observable,它發(fā)出源 Observable 發(fā)出的所有項(xiàng)目,這些項(xiàng)目與以前的項(xiàng)目相比是不同的。

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

參量

keySelector 可選的。 默認(rèn)值為 undefined。 可選功能,用于選擇您要檢查為不同的值。
flushes 可選的。 默認(rèn)值為 undefined。         可選 Observable,用于刷新運(yùn)算符的內(nèi)部HashSet。

returns

MonoTypeOperatorFunction<T>:一個(gè) Observable,它從源 Observable 發(fā)出具有不同值的項(xiàng)目。

描述

如果提供了 keySelector 函數(shù),則它將可觀察到的源中的每個(gè)值投影到一個(gè)新值中 檢查與先前預(yù)測的值是否相等。 如果未提供 keySelector 函數(shù),它將使用來自 可以直接通過對(duì)先前值的相等性檢查來觀察源。

在支持的 JavaScript 運(yùn)行時(shí)中 Set,此運(yùn)算符將使用 Set來提高非重復(fù)值檢查的性能。

在其他運(yùn)行時(shí),該運(yùn)營商將使用一個(gè)最小的實(shí)現(xiàn) Set依賴于一個(gè) ArrayindexOf下 引擎蓋,因此當(dāng)檢查更多的值以區(qū)別時(shí),性能將下降。 即使在較新的瀏覽器中,長期運(yùn)行 distinct 使用可能會(huì)導(dǎo)致內(nèi)存泄漏。 為了在某些情況下緩解這種情況, 一個(gè)可選 flushes還提供了 參數(shù),以便 內(nèi)部 Set可以被“清除”,基本上清除了其價(jià)值。

例子

一個(gè)簡單的數(shù)字例子

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 函數(shù)的示例

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' }

也可以看看

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)