distinct
function stable operator
Возвращает Observable, который испускает все элементы, испускаемые исходным Observable, которые отличаются по сравнению с предыдущими элементами.
distinct<T, K>(keySelector?: (value: T) => K, flushes?: ObservableInput<any>): MonoTypeOperatorFunction<T>
Параметры
keySelector | (value: T) => K | Необязательно. По умолчанию Необязательный параметр для выбора значения, которое будет проверяться на отличие. |
flushes | ObservableInput<any> | Необязательно. По умолчанию Необязательный параметр для сброса внутреннего 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' } См. также
© 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