distinctUntilKeyChanged

signature: distinctUntilKeyChanged(key, compare: fn): Observable

Only emit when the specified key value has changed

Examples

Example 1: Compare based on key

( StackBlitz )

// RxJS v6+
import { from } from 'rxjs';
import { distinctUntilKeyChanged } 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 based on name property
  .pipe(distinctUntilKeyChanged('name'))
  // output: { name: 'Brian }, { name: 'Joe' }, { name: 'Sue' }
  .subscribe(console.log);

Example 2: Keyboard events

( StackBlitz )

// RxJS v6+
import { fromEvent } from 'rxjs';
import { distinctUntilKeyChanged, pluck } from 'rxjs/operators';

const keys$ = fromEvent(document, 'keyup')
  .pipe(
    distinctUntilKeyChanged<KeyboardEvent>('code'),
    pluck('key')
  );

keys$.subscribe(console.log);

Additional Resources

:file_folder: Source Code: https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/distinctUntilKeyChanged.ts

Last updated