RxJS distinctUntilKeyChanged
返回一个 Observable,该对象使用通过使用提供的键检查的两个属性是否不同而访问的属性来发出源 Observable 发出的,与上一个项目相比有所不同的所有项目。
distinctUntilKeyChanged<T, K extends keyof T>(key: K, compare?: (x: T[K], y: T[K]) => boolean): MonoTypeOperatorFunction
<T>
参量
键 | 每个项目上对象属性查找的字符串键。 |
---|---|
相比 | 可选的。默认值为undefined 。调用可选的比较函数以测试某项是否与源中的上一项不同。 |
returns
MonoTypeOperatorFunction<T>
:一个 Observable,它根据指定的键从源 Observable 发出具有不同值的项目。
描述
如果提供了比较器功能,则将为每个项目调用比较器功能,以测试是否应发出该值。
如果未提供比较器功能,则默认情况下使用相等检查。
例子
比较人员姓名的示例
import { of } from 'rxjs';
import { distinctUntilKeyChanged } from 'rxjs/operators';
interface Person {
age: number,
name: string
}
of<Person>(
{ age: 4, name: 'Foo'},
{ age: 7, name: 'Bar'},
{ age: 5, name: 'Foo'},
{ age: 6, name: 'Foo'},
).pipe(
distinctUntilKeyChanged('name'),
)
.subscribe(x => console.log(x));
// displays:
// { age: 4, name: 'Foo' }
// { age: 7, name: 'Bar' }
// { age: 5, name: 'Foo' }
比较名称首字母的示例
import { of } from 'rxjs';
import { distinctUntilKeyChanged } from 'rxjs/operators';
interface Person {
age: number,
name: string
}
of<Person>(
{ age: 4, name: 'Foo1'},
{ age: 7, name: 'Bar'},
{ age: 5, name: 'Foo2'},
{ age: 6, name: 'Foo3'},
).pipe(
distinctUntilKeyChanged('name', (x: string, y: string) => x.substring(0, 3) === y.substring(0, 3)),
)
.subscribe(x => console.log(x));
// displays:
// { age: 4, name: 'Foo1' }
// { age: 7, name: 'Bar' }
// { age: 5, name: 'Foo2' }