Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from the previous item.
If a comparator function is provided, then it will be called for each item to test for whether or not that value should be emitted.
If a comparator function is not provided, an equality check is used by default.
测试代码:
of(1, 1, 2, 2, 2, 1, 1, 2, 3, 3, 4).pipe(
distinctUntilChanged(),
)
.subscribe(x => console.log(x)); // 1, 2, 1, 2, 3, 4
```比较。
注意distrinct是当前元素和前一个元素比较,而不是和整个Observable集合值比较。
![](https://upload-images.jianshu.io/upload_images/2085791-53313ee9d1efce7c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
传自定义比较函数的例子:
```typescript
of(
{ age: 4, name: 'Foo'},
{ age: 7, name: 'Bar'},
{ age: 5, name: 'Foo'},
{ age: 6, name: 'Foo'},
).pipe(
distinctUntilChanged((p: Person, q: Person) => p.name === q.name),
)
.subscribe(x => console.log(x));
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yN1YTO0EzN5YjNjBDMhlDOlZDO0EzYyImYwMWZjRWY28CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)