distinctUntilChanged

签名: distinctUntilChanged(compare: function): Observable

只有当当前值与之前最后一个值不同时才将其发出。


:bulb: distinctUntilChanged 默认使用 === 进行比较, 对象引用必须匹配!


示例

示例 1: 使用基础值进行 distinctUntilChanged

( jsBin |
jsFiddle )

  1. import { from } from 'rxjs/observable/from';
  2. import { distinctUntilChanged } from 'rxjs/operators';
  3. // 基于最新发出的值进行比较,只输出不同的值
  4. const myArrayWithDuplicatesInARow = from([1, 1, 2, 2, 3, 1, 2, 3]);
  5. const distinctSub = myArrayWithDuplicatesInARow
  6. .pipe(distinctUntilChanged())
  7. // 输出: 1,2,3,1,2,3
  8. .subscribe(val => console.log('DISTINCT SUB:', val));
  9. const nonDistinctSub = myArrayWithDuplicatesInARow
  10. // 输出 : 1,1,2,2,3,1,2,3
  11. .subscribe(val => console.log('NON DISTINCT SUB:', val));
示例 2: 使用对象进行 distinctUntilChanged

( jsBin |
jsFiddle )

  1. import { from } from 'rxjs/observable/from';
  2. import { distinctUntilChanged } from 'rxjs/operators';
  3. const sampleObject = { name: 'Test' };
  4. // 对象必须有相同的引用
  5. const myArrayWithDuplicateObjects = from([
  6. sampleObject,
  7. sampleObject,
  8. sampleObject
  9. ]);
  10. // 基于最新发出的值进行比较,只输出不同的对象
  11. const nonDistinctObjects = myArrayWithDuplicateObjects
  12. .pipe(distinctUntilChanged())
  13. // 输出: 'DISTINCT OBJECTS: {name: 'Test'}
  14. .subscribe(val => console.log('DISTINCT OBJECTS:', val));

其他资源


:file_folder: 源码: https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/distinctUntilChanged.ts