Пропускает значение если оно отличается от прудыдущего
distinctUntilChanged<T, K>(
compare?: (x: K, y: K) => boolean,
keySelector?: (x: T) => K
): MonoTypeOperatorFunction<T>
💡 distinctUntilChanged по умолчанию использует оператор
===
, в этом случае ссылки на объекты должны совпадать
-
compare
опциональноФункция сравнения нынешнего и предыдущего значения, по умолчанию
undefined
-
keySelector
опциональноФункция возвращающая значение
y
на основанииx
. На данный момент игнорируется
// RxJS v6+
import { from } from 'rxjs';
import { distinctUntilChanged } from 'rxjs/operators';
// only output distinct values, based on the last emitted value
const source$ = from([1, 1, 2, 2, 3, 3]);
source$
.pipe(distinctUntilChanged())
// output: 1,2,3
.subscribe(console.log);
// RxJS v6+
import { from } from 'rxjs';
import { distinctUntilChanged } from 'rxjs/operators';
const sampleObject = { name: 'Test' };
//Objects must be same reference
const source$ = from([sampleObject, sampleObject, sampleObject]);
// only emit distinct objects, based on last emitted value
source$
.pipe(distinctUntilChanged())
// output: {name: 'Test'}
.subscribe(console.log);
// RxJS v6+
import { from } from 'rxjs';
import { distinctUntilChanged } from 'rxjs/operators';
// only output distinct values, based on the last emitted value
const source$ = from([
{ name: 'Brian' },
{ name: 'Joe' },
{ name: 'Joe' },
{ name: 'Sue' }
]);
source$
// custom compare for name
.pipe(distinctUntilChanged((prev, curr) => prev.name === curr.name))
// output: { name: 'Brian }, { name: 'Joe' }, { name: 'Sue' }
.subscribe(console.log);
- 📰 Официальная документация: distinctUntilChanged
- 📁 Исходный код: https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/distinctUntilChanged.ts