rxjs里distinctUntilChanged operators的用法

155 阅读1分钟

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://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/450c8a53211a4ee1aacc8d9cfe33bb0c~tplv-k3u1fbpfcp-zoom-1.image)

传自定义比较函数的例子:

```typescript
of<Person>(
       { 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));

结果:

要获取更多Jerry的原创文章,请关注公众号"汪子熙":