RxJS之过滤操作符 ( Angular环境 )

一 take操作符

只发出源 Observable 最初发出的的N个值 (N = count)。 如果源发出值的数量小于 count 的话,那么它的所有值都将发出。然后它便完成,无论源 Observable 是否完成。

1import { Component, OnInit } from '@angular/core'; 2import { range } from 'rxjs/observable/range'; 3import { take } from 'rxjs/operators/take'; 4 5@Component({ 6 selector: 'app-filter', 7 templateUrl: './filter.component.html', 8 styleUrls: ['./filter.component.css'] 9}) 10export class FilterComponent implements OnInit { 11 12 constructor() { } 13 14 ngOnInit() { 15 range(100, 10) 16 .pipe(take(5)) 17 .subscribe(val => { 18 console.log(val); 19 }); 20 } 21 22}

 二 distinctUntilChanged操作符

返回 Observable,它只发出源 Observable 发出的与前一项不相同的项。

如果没有提供 compare 函数,默认使用===严格相等检查。

1import { Component, OnInit } from '@angular/core'; 2import { of } from 'rxjs/observable/of'; 3import { distinctUntilChanged } from 'rxjs/operators/distinctUntilChanged'; 4 5@Component({ 6 selector: 'app-filter', 7 templateUrl: './filter.component.html', 8 styleUrls: ['./filter.component.css'] 9}) 10export class FilterComponent implements OnInit { 11 12 constructor() { } 13 14 ngOnInit() { 15 of(1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3) 16 .pipe(distinctUntilChanged()) 17 .subscribe( 18 val => { 19 console.log(val); 20 } 21 ); 22 } 23 24}

如果提供了 compare 函数,那么每一项都会调用它来检验是否应该发出这个值。

1import { Component, OnInit } from '@angular/core'; 2import { of } from 'rxjs/observable/of'; 3import { distinctUntilChanged } from 'rxjs/operators/distinctUntilChanged'; 4 5export class Person { 6 constructor(public name: string, public age: number) { } 7} 8 9@Component({ 10 selector: 'app-filter', 11 templateUrl: './filter.component.html', 12 styleUrls: ['./filter.component.css'] 13}) 14export class FilterComponent implements OnInit { 15 16 constructor() { } 17 18 ngOnInit() { 19 of<Person>( 20 new Person('Leo', 11), 21 new Person('Raph', 12), 22 new Person('Mikey', 13), 23 new Person('Mikey', 14) 24 ) 25 .pipe( 26 // of方法使用了泛型,可以省略指定p、q为Person类型 27 distinctUntilChanged((p, q) => p.name === q.name) 28 ) 29 .subscribe( 30 val => { 31 console.log(val); 32 } 33 ); 34 } 35 36}

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

swap空间的增减方法

(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap