操作员是一个可观察到的函数,并控制并仅以我们需要的方式来控制我们感兴趣的信息。
地图
它使我们能够转换或提取可观察到的东西散发到不同的事物中,以保持原始流的结构。 kude0是RXJ中最常见,最强大的运营商之一,可广泛用于在可观察的数据中执行转换。
地图的基本语法如下:
observable$.pipe(
map(valor => nuevoValor)
)
其中$是所需值的可观察数据流,值=>新值是一个转换函数,它将可观察到的每个值发出并返回一个新的转换值。
示例:
值的转换:将作为参数的转换函数应用于可观察到的每个值。此功能采用原始值并返回一个新的变换值。例如:
const numeros$ = of(1, 2, 3, 4, 5); // Observable que emite los números del 1 al 5
numeros$.pipe(
map(numero => numero * 2) // Transforma cada número emitido por el observable multiplicándolo por 2
).subscribe(resultado => console.log(resultado));
此代码的结果是在控制台上打印:2、4、6、8、10,这是原始值乘以2。
筛选
filter
操作员是一个过滤功能,用于仅发布符合指定条件的可观察数据流的元素。换句话说,过滤器允许您选择满足给定条件的可观察到的元素,并丢弃不符合的条件。
过滤器的基本语法如下:
observable$.pipe(
filter(condicion)
)
其中$是要过滤元素的可观察数据流,并且条件是一个谓词功能,指定要选择的每个元素必须满足的条件。
Kude1允许我们使用任何返回布尔值的谓词功能来评估过滤条件。这提供了极大的灵活性,可以根据可观察到的元素的任何属性或特征来指定复杂条件。
让我们看一个示例:
const personajes = [
{
tipo: 'heroe',
nombre: 'Batman',
},
{
tipo: 'heroe',
nombre: 'Robin',
},
{
tipo: 'villano',
nombre: 'Joker',
},
];
from(personajes)
.pipe(filter((personaje) => personaje.tipo === 'heroe'))
.subscribe(console.log);
一个重要的滤波器特征是,在可观察结果中未发出不符合谓词函数中指定条件的元素。这意味着仅发出满足条件的元素,而另一个则被忽略并且不会在数据流中传播。
轻敲
Tap Oterator是一个实用程序操作员,允许在流经可观察到的数据流的元素中进行次要动作或副作用,而不会影响Sã元素的发射或转换。它是在不修改其行为的情况下净化,注册或执行其他逻辑的强大工具。
点击的基本语法如下:
observable$.pipe(
tap(funcionEfecto)
)
如果可观察的$是需要的可观察数据流,并且功能效应是可观察到的每个元素执行的函数,而无需修改圣经中的元素,并且可以执行任何其他逻辑所需的其他逻辑。
kude4操作员为可观察到的每个元素执行指定的效果函数。效果功能可以是您想要执行的任何其他libic的功能,例如在控制台上打印,注册事件,将数据发送到服务器等。效应函数不会修改圣经中的元素,它仅在â©L。上执行其他操作。
const numeros$ = of(1, 2, 3, 4, 5); // Observable que emite números
numeros$.pipe(
tap(numero => console.log(`Número emitido: ${numero}`)) // Imprime en la consola cada número emitido
).subscribe();
这种方式在控制台中打印的结果:发行的号码:1,编号:2,编号:3,编号:4,no。>
请务必记住,TAP不会修改可观察到的元素。效应函数与元素的发射并行执行,而无需修改它们。如果要修改发行的元素,则应将其他数据转换操作员与TAP结合使用。
const numeros$ = of(1, 2, 3, 4, 5); // Observable que emite números
numeros$.pipe(
tap(x => console.log),
map(val => val * 10)
).subscribe(val => console.log)
结果是10、20、30、40、50
减少
reduce
运算符是一个转换操作员,允许将值序列降低一个值,该操作员将累加函数作为参数接收,并将上述函数应用于入口序列发出的值。
累积函数需要两个参数:输入序列发出的累加器和当前值。累加器是到目前为止的累加值,而当前值是当时由序列发出的值。累积函数必须返回将用作累加器的新值的值。
rxjs中运算符的一般形式如下:
reduce(accumulator: function, seed?: any): Observable
accumulator
参数是适用于序列发出的值的累积函数。 kude7参数是可选值,将用作累加器的初始值。如果提供了kude7,则累积函数将适用于seed
和序列发出的第一个值。如果未提供seed
,则累积函数将应用于序列发出的第一个和第二个值。
操作员减少了发出单个值的kude11:积累的最终结果。输入序列完成后发出此值。
有一个示例:
import { of } from 'rxjs';
import { reduce } from 'rxjs/operators';
const source = of(1, 2, 3, 4, 5);
const example = source.pipe(
reduce((acc, curr) => acc + curr)
example.subscribe(console.log) // salida: 15
在上一个示例中,我们创建了一个kude11,该kude11发出值1,2,3,4,5。积累的最终结果为15,这是在入口顺序完成后发出的。
扫描
scan
运算符是一个类似于kude5运算符的转换操作员,但它没有在序列的末尾发出单个值,而是在序列的每个步骤中发出一个累积值。
操作员kude14的一般形式如下:
scan(accumulator: function, seed?: any): Observable
accumulator
参数是适用于序列发出的值的累积函数。 kude7参数是可选值,将用作累加器的初始值。如果提供了kude7,则累积函数将适用于seed
和序列发出的第一个值。如果未提供seed
,则累积函数将应用于序列发出的第一个和第二个值。
kude14操作员返回一个kude11,该kude11在将累加函数应用于入口序列的每个值后发出累积值。
例如:
import { of } from 'rxjs';
import { scan } from 'rxjs/operators';
const source = of(1, 2, 3, 4, 5);
const example = source.pipe(
scan((acc, curr) => acc + curr)
example.subscribe(console.log) // salida: 1, 3, 6, 10, 15
在此示例中,我们创建了一个发射值1、2、3、4、5的kude11,然后使用添加值的函数函数应用Kude14运算符。将累加函数应用于输入序列的每个值后,累积值将在序列的每个步骤中发出。这种情况是,出口为1、3、6、10、15。
拿
take
操作员允许您发布入口序列发出的第一个n值。一旦发出值,该序列就会自动完成并停止。
采用基本语法如下:
take(count: number): Oberservable
count
参数指定完成序列之前必须发出的值数量。
有一个示例说明如何在rxjs中使用take
运算符
import { interval } from 'rxjs'
import { take } from 'rxjs/operators';
const source = interval(1000);
const example = source.pipe(
take(5)
);
example.subscribe(console.log) // salida: 0, 1, 2, 3, 4
在此示例中,我们创建一个使用Kude33运算符每秒发出值的Kude11。然后,我们将Kude29操作员以5为5的参数应用,这意味着仅发行了序列发出的前5个值。 Kude35的输出为0、1、2、3、4。
take
运算符也可以与其他RXJS运营商结合使用,例如filter
,map
,mergeMap
,等等。操纵和限制输入序列发出的值。