Spec-Zone.ru › RxJS

distinct

function stable operator

Возвращает Observable, который испускает все элементы, испускаемые исходным Observable, которые отличаются по сравнению с предыдущими элементами.

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

Параметры

keySelector (value: T) => K

Необязательно. По умолчанию undefined.

Необязательный параметр для выбора значения, которое будет проверяться на отличие.

flushes ObservableInput<any>

Необязательно. По умолчанию undefined.

Необязательный параметр для сброса внутреннего HashSet оператора.

Возвращает

MonoTypeOperatorFunction<T>: Функция, которая возвращает Observable, испускающий элементы из исходного Observable с уникальными значениями.

Описание

Если функция keySelector предоставлена, она будет проектировать каждое значение из исходного observable в новое значение, которое будет проверяться на равенство с ранее спроецированными значениями. Если функция keySelector не предоставлена, каждое значение из исходного observable будет использоваться непосредственно с проверкой равенства по отношению к предыдущим значениям.

В средах выполнения JavaScript, которые поддерживают Set, этот оператор будет использовать Set для повышения производительности проверки уникальных значений.

В других средах выполнения этот оператор будет использовать минимальную реализацию Set, которая полагается на Array и indexOf в своей работе, поэтому производительность будет снижаться по мере проверки большего количества значений на уникальность. Даже в новых браузерах, длительное использование distinct может привести к утечкам памяти. Чтобы помочь устранить это в некоторых сценариях, также предоставляется необязательный параметр flushes, позволяющий «сбрасывать» внутренний Set, по сути, очищая его от значений.

Примеры

Простой пример с числами

import { of, distinct } from 'rxjs';

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

// Outputs
// 1
// 2
// 3
// 4

Пример использования функции keySelector

import { of, distinct } from 'rxjs';

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

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

См. также

  • distinctUntilChanged
  • distinctUntilKeyChanged

© 2015–2022 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors.
Code licensed under an Apache-2.0 License. Documentation licensed under CC BY 4.0.
https://rxjs.dev/api/operators/distinct

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API