rxjs-过滤操作符

作者: bugWriter_y | 来源:发表于2019-06-14 11:32 被阅读9次
    1. filter

    过滤操作符,和数组和filter方法类似

    案例,取出能被2整除的数据

    import { interval } from 'rxjs';
    import { filter } from "rxjs/operators";
    interval(1000).pipe(
      filter(x=>x%2==0)
    ).subscribe(x=>console.log(x))
    
    1. first

    只要第一个数据

    import { of } from 'rxjs';
    import { first } from "rxjs/operators";
    of(1,2,3,4).pipe(
      first()
    ).subscribe(x=>console.log(x),e=>{},()=>{
      console.log("complete")
    })
    
    1. last

    只要最后一个元素

    import { of } from 'rxjs';
    import { last } from "rxjs/operators";
    of(1,2,3,4).pipe(
      last()
    ).subscribe(x=>console.log(x))
    
    1. take

    取前n个

    import { interval } from 'rxjs';
    import { take } from "rxjs/operators";
    interval(1000).pipe(
      take(3)
    ).subscribe(x=>console.log(x),e=>{},()=>{
      console.log("complete")
    })
    
    1. takeLast

    取后n个

    import { of } from 'rxjs';
    import { takeLast } from "rxjs/operators";
    of(1,2,3,4,5,6,7,8).pipe(
      takeLast(3)
    ).subscribe(x=>console.log(x))
    
    1. takeUntil

    取前n个,类似于take,但是结束的标识不是个数,而是内部源发射第一个数据

    案例,取前n个,当点击页面的时候结束

    import { interval, fromEvent } from 'rxjs';
    import { takeUntil } from "rxjs/operators";
    interval(1000).pipe(
      takeUntil(fromEvent(document,"click"))
    ).subscribe(x => console.log(x))
    
    
    1. takeWhile

    取前n个,当不满足要求时结束

    import { interval } from 'rxjs';
    import { takeWhile } from "rxjs/operators";
    interval(1000).pipe(
      takeWhile(x=>x<5)
    ).subscribe(x => console.log(x))
    
    1. skip

    跳过前几个

    import { interval } from 'rxjs';
    import { skip } from "rxjs/operators";
    interval(1000).pipe(
      skip(3)
    ).subscribe(x => console.log(x))
    
    
    1. skipLast

    省略后几个

    import { of } from 'rxjs';
    import { skipLast } from "rxjs/operators";
    of(1,2,3,4).pipe(
      skipLast(2)
    ).subscribe(x => console.log(x))
    
    1. skipUntil

    意思类似于takeUntil,跳过前n个,当内部源发射数据时开始发射数据

    案例:当点击页面是开始发射数据

    import { interval, fromEvent } from 'rxjs';
    import { skipUntil } from "rxjs/operators";
    interval(1000).pipe(
      skipUntil(fromEvent(document,"click"))
    ).subscribe(x => console.log(x))
    
    1. skipWhile

    意思类似于takeWhile,当出现第一个不满足的数据时结束跳过开始发射数据,之后的数据不再验证

    import { of } from 'rxjs';
    import { skipWhile } from "rxjs/operators";
    of(1,2,3,4,3,2,1).pipe(
      skipWhile(x=>x<4)
    ).subscribe(x => console.log(x))
    
    1. distinct

    发射与之前所有发射过的数据不一样的数据。可以传一个函数,返回比较的值

    //按照对象本身比较不用传递函数
    import { of } from 'rxjs';
    import { distinct } from "rxjs/operators";
    of(1,1,1,2,2,3,3,4,5,6,4,3).pipe(
      distinct()
    ).subscribe(x => console.log(x))
    
    
    //按照对象的某个属性比较,需要传递函数
    import { of } from 'rxjs';
    import { distinct } from "rxjs/operators";
    of({id:1,age:12},{id:1,age:12},{id:1,age:12},{id:2,age:12}).pipe(
      distinct(x=>x.id)
    ).subscribe(x => console.log(x))
    
    
    1. distinctUntilChanged

    和distinct类似,只不过distinct是全局比较不同,而distinctUntilChanged是只和上一个数据比较。

    可以传递函数用于复杂对象的比较

    //按照对象本身比较不用传递函数
    import { of } from 'rxjs';
    import { distinctUntilChanged } from "rxjs/operators";
    of(1,2,3,3,3,2,1,1,2).pipe(
      distinctUntilChanged()
    ).subscribe(x => console.log(x))
    
    //按照对象的某个属性比较,需要传递函数
    import { of } from 'rxjs';
    import { distinctUntilChanged } from "rxjs/operators";
    of({id:1,age:12},{id:1,age:12},{id:2,age:12}).pipe(
      distinctUntilChanged((x,y)=>x.id==y.id)
    ).subscribe(x => console.log(x))
    
    1. distinctUntilKeyChanged

    是distinctUntilChanged中对象属性比较的简化写法

    import { of } from 'rxjs';
    import { distinctUntilKeyChanged } from "rxjs/operators";
    of({id:1,age:12},{id:1,age:12},{id:2,age:12}).pipe(
      distinctUntilKeyChanged("id")
    ).subscribe(x => console.log(x))
    
    1. elementAt

    取索引为n的元素,索引从0开始

    import { of } from 'rxjs';
    import { elementAt } from "rxjs/operators";
    of(1,2,3,4).pipe(
      elementAt(3)
    ).subscribe(x => console.log(x))
    
    1. ignoreElements

    忽略所有数据,不发射数据。唯一的用户就是用来触发complete或者error。

    import { of } from 'rxjs';
    import { ignoreElements } from "rxjs/operators";
    of(1,2,3,4).pipe(
      ignoreElements()
    ).subscribe(x => console.log(x),err=>{},()=>console.log('complete'))
    
    1. single

    用来保证有且只有一个元素发射出来,如果没有元素或者多余1个元素发射出来那么会报错。

    import { of } from 'rxjs';
    import { single } from "rxjs/operators";
    of(1).pipe(
      single()
    ).subscribe(x => console.log(x),err=>{console.error(`error:${err}`)},()=>console.log('complete'))
    
    of().pipe(
      single()
    ).subscribe(x => console.log(x),err=>{console.error(`error:${err}`)},()=>console.log('complete'))
    
    of(1,2,3).pipe(
      single()
    ).subscribe(x => console.log(x),err=>{console.error(`error:${err}`)},()=>console.log('complete'))
    
    

    相关文章

      网友评论

        本文标题:rxjs-过滤操作符

        本文链接:https://www.haomeiwen.com/subject/bqyufctx.html