看了RXJ中的常见运营商之后,这次是某些不常见的操作员的转变,也许是某些开发人员未知的,但是在将行为添加到我们的行为中时非常有用。
第一的
first
操作员是一个过滤操作员,仅发出入口序列中发出的第一个值然后完成序列。
还可以指定可选条件以确定发行的第一个值。
kude0运算符的一般形式如下:
first(predicate?: function): Observable
predicate
参数是一个函数,用于确定序列中发出的第一个值。如果未提供predicate
函数,Kuude0运算符将发布以序列发出的第一个函数,其行为与我们使用Kude Operator一样。
有一个示例:
import { interval } from 'rxjs'
import { first } from 'rxjs/operators';
const source = from([1, 2, 3, 4, 5]);
const example - source.pipe(
first(x => x > 2)
);
example.subscribe(console.log) // salida: 3
在此示例中,我们创建了一个发射值1、2、3、4、5的kude6,然后我们将Kouude0运算符应用带有Kouude2函数的Kouude0运算符,该函数将Kouude9返回第一个值,该值大于2。它以满足条件的顺序发行的第一个值为3,因此这就是subscribe
的退出。
必须记住,Kude11将在发出第一个值后完成顺序,因此将排除第一个值后发出的任何附加值。如果没有符合条件的值,则将产生的kude6不会发出任何值。
同时
takeWhile
操作员是一个过滤操作员,它采用Koude发出的值,直到产生不满足指定条件的值为止。
kude13操作员的一般形式如下:
takeWhile(predicate?: function, inclusive?: boolean): Observable
predicate
参数是用于评估Observable
发出的每个值的函数。如果发行的值满足指定条件,则将包含在结果中。如果该值不满足条件,则将完成订阅并将发行。
可选的inclusive
参数用于包括或排除指定条件不满足的值。如果Kude18是kude9,则条件不符合的值将包括在出口中。如果kouude18是kouude22条件不符合的值,则将排除在出口中。
例如:
import { of } from 'rxjs'
import { takeWhile } from 'rxjs/operators';
const source = of(1, 2, 3, 4, 5);
const example - source.pipe(
takeWhile(x => x < 4)
);
example.subscribe(console.log) // salida: 1, 2, 3
在此示例中,我们创建了一个排放值1、2、3、4、5的kude6,然后我们将Kude13运算符应用带有Kouude2函数的Kude13运算符,该函数评估了,如果发出的每个值小于4将包括证券1、2和3,但在发出4年-OREAR -old的价值之后,值的排放将停止。
也可以使用可选的inclusive
参数包括或排除指定条件不满足的值。例如:
import { of } from 'rxjs'
import { takeWhile } from 'rxjs/operators';
const source = of(1, 2, 3, 4, 5);
const example - source.pipe(
takeWhile(x => x < 4, true)
);
example.subscribe(console.log) // salida: 1, 2, 3, 4
在这种情况下,即使条件将由Observable
发行,并且值的发行将在该条件不符合的值5之后停止。
情况
takeUntil
操作员是一个结束操作员,它播放kude6的值,直到从另一个kude6广播事件。
kude13操作员的一般形式如下:
takeUntil(notifier: Observable): Observable
notifier
参数是一个kouude6,用于广播一个事件,表明原点的发射必须结束。当kude33发出值或完整时,origin Observable
完成并且不再发出值。
这将是您的大理石水龙头:
有一个示例:
import { interval, timer } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
const source = interval(1000);
const stopTimer = timer(5000);
const example = source.pipe(
takeUntil(stopTimer)
);
example.subscribe(console.log) // salida: 0, 1, 2, 3, 4
在此示例中,我们创建一个使用Kude39每秒发射值的Kude6,然后我们创建了一个使用timer(5000)
后5秒后完成的Observable
。最后,我们将kude29运算符与kude33 stopTimer
一起使用,该操作员将在5秒后完成原点的传输。
结果是,仅发射原点的前5个值,因为在kude33 kude44发出的值和完整值之后,发射被停止。
我们还可以使用其他kude6(例如notifier
)来结束原点Observable
的发射,例如按压植物,API响应,中断的网络连接,等等。
跳过
skip
操作员用于省略kude6的第一个元素并广播其余元素。
kude52操作员的一般形式如下:
skip(count: number): Observable
kude55参数是一个整数,指示在开始广播元素之前必须省略元素的数量。
这是Kude52操作员的大理石图:
在这里一个例子:
import { of } from 'rxjs';
import { skip } from 'rxjs/operators';
const source = of(1, 2, 3, 4, 5);
const example = source.pipe(skip(3));
example.subscribe(console.log); // salida: 4, 5
在此示例中,我们创建了一个kude6,该kude6使用kude58排放值1、2、3、4、5,然后我们将kude52运算符应用于3,这意味着将省略前3个值。结果kude6的出口为4和5。
我们还可以使用更复杂的液体表达式来确定必须省略哪些元素。例如,我们可以使用lambda表达式,该表达式根据元素的属性返回真或错误。
重要的是要记住,如果要省略的要素数量
清楚的
distinct
操作员仅发射kude6的唯一值,省略了先前发出的值。
kude63操作员的一般形式如下:
distinct(keySelector?: (value: T) => K, flushes?: Observable<any>): Observable<T>
可选参数kude66是用于为每个元素选择一个iganic键的函数。如果未提供kouude66函数,则值本身用作密钥。
可选参数kude68是一种用于清洁先前发射值的kude6。
让我们以这个示例:
import { of } from 'rxjs';
import { distinct } from 'rxjs/operators';
const source = of(1, 2, 3, 1, 2, 4, 5, 3);
const example = source.pipe(distinct());
example.subscribe(console.log); // salida: 1, 2, 3, 4, 5
在此示例中,我们创建了一个发出值1、2、3、1、2、4、3的kude6,然后使用kude71,然后应用kude63运算符,该操作员将省略重复值并仅发射ânicos。结果kude6的出口为1、2、3、4、5。
我们还可以使用keySelector
函数根据元素的某些属性或特征选择一个iginal键。例如,如果我们有一个带有kude76属性的用户对象的kouude6,我们可以使用kuude66函数仅发射使用kude76éºnico的用户对象:
import { of } from 'rxjs';
import { distinct } from 'rxjs/operators';
const users = [
{ id: 1, name: 'Alice },
{ id: 2, name: 'Bob },
{ id: 1, name: 'Charlie },
{ id: 3, name: 'David },
{ id: 2, name: 'Eve }
]
const source = of(users);
const example = source.pipe(distinct(user => user.id));
example.subscribe(console.log); // salida: { id: 1, name: 'Alice}, { id: 2, name 'Bob' }, { id: 3, name: 'David' }
在示例中,我们创建了一个kude6,该kude6发出了数组users
中定义的用户对象。然后,我们将Kude63运算符应用于Kuude66函数,该功能选择每个用户对象的Kuude76属性作为唯一的密钥。生成的kude6的出口仅是带有kouude76的用户对象:{id:1,name:'alice},{id:2,name'bob'},{id:3,name:'david'}。 /p >
请务必记住,Kude63运算符使用内部缓存来存储先前发出的值并确定值是否唯一。如果Kude6散发,这可能会导致性能问题。
同样重要的是要强调,kude63运营商使用三重股权运营商相等的===
比较发行的值。
独特的未加工
distinctUntilChanged
运算符用于仅发布不等于kude6发出的先前值的值省略而不是发射。
kude90操作员的一般形式如下:
distinctUntilChanged(compareFn?: (x: T, y: T) => boolean): MonoTypeOperatorFunction<T>
可选参数compareFn
是一个用于比较两个值并确定它们是否相同的函数。如果没有提供Kude93函数,则使用Kude89运算符来比较值。
例如:
import { of } from 'rxjs';
import { distinctUntilChanged } from 'rxjs/operators';
const source = of(1, 1, 2, 3, 3, 3, 4, 4, 5);
const example = source.pipe(distinctUntilChanged());
example.subscribe(console.log); // salida: 1, 2, 3, 4, 5
在此示例中,我们创建了一个kude6,该kude6使用rxjs of
函数发出值1、1、2、3、3、4、4、5并发出不等于先前发行的值的值。结果kude6的出口为1、2、3、4、5。
我们还可以使用compareFn
函数来自定义值的比较。例如,如果我们有一个带有kude102属性的用户对象的Observable
,我们可以使用kuude93函数来省略具有相同名称的用户对象:
import { of } from 'rxjs';
import { distinctUntilChanged } from 'rxjs/operators';
const users = [
{ id: 1, name: 'Alice },
{ id: 2, name: 'Bob },
{ id: 1, name: 'Bob },
{ id: 3, name: 'David },
{ id: 2, name: 'David }
]
const source = of(...users);
const example = source.pipe(distinctUntilChanged((ant, act) => ant.name === act.name));
example.subscribe(console.log); // salida: { id: 1, name: 'Alice}, { id: 2, name 'Bob' }, { id: 3, name: 'David' }
在此示例中,我们创建了一个kude6,该kude6发出了数组user
中定义的用户对象,然后,我们将Kuude90运算符应用带有compare
函数,该功能仅比较两个连续对象的用户名。生成的kude6的退出是只有名称与上一个值不同的用户对象:{id:1,name:'alice},{id:2,name'bob'},{id:3,name:name:名称:'David'}
独特的nuntilkeychanged
distinctUntilKeyChanged
运算符用于基于发出的对象的特定键,仅发布与上一个值不同的值。它与Kude90运算符相似,但它没有比较发行的完整值,而仅比较对象的特定属性的值。
import { of } from 'rxjs';
import { distinctUntilKeyChanged } from 'rxjs/operators';
const users = [
{ id: 1, name: 'Alice },
{ id: 2, name: 'Bob },
{ id: 1, name: 'Bob },
{ id: 3, name: 'David },
{ id: 2, name: 'David }
]
const source = of(...users);
const example = source.pipe(distinctUntilKeyChanged('name');
example.subscribe(console.log); // salida: { id: 1, name: 'Alice}, { id: 2, name 'Bob' }, { id: 3, name: 'David' }
您可以看到,我们必须只指定比较发射对象的键,在这种情况下,键是名称,退出将为{id:1,name:'alice},{id:2,name'bob'bob '},{id:3,名称:'David'}