zoukankan      html  css  js  c++  java
  • [RxJS] Filtering operators: distinct and distinctUntilChanged

    Operator distinct() and its variants are an important type of Filtering operator. This lessons shows how they work and in what cases are they useful.

    distinctUntilChanged():

    var foo = Rx.Observable.interval(500).take(5)
      .zip(Rx.Observable.of('a','b','a','a','b'), (x,y)=>y);
    
    /*
    --a--b--a--a--b|
       distinctUntilChanged
    --a--b--a-----b|
    */
    
    var result = foo.distinctUntilChanged();
    
    result.subscribe(
      function (x) { console.log('next ' + x); },
      function (err) { console.log('error ' + err); },
      function () { console.log('done'); },
    );

    distinct(comparFn, flushFn):

    var foo = Rx.Observable.interval(500).take(5)
      .zip(Rx.Observable.of('a','b','a','a','b'), (x,y)=>y);
    
    /*
    --a--b--a--a--b|
       distinct
    --a--b---------|
    */
    
    var result = foo.distinct();
    
    result.subscribe(
      function (x) { console.log('next ' + x); },
      function (err) { console.log('error ' + err); },
      function () { console.log('done'); },
    );
      
      /*
    "next a"
    "next b"
    "done"  
      */

    With CamperFn():

    var foo = Rx.Observable.interval(500).take(5)
      .zip(Rx.Observable.of('a','b','a','A','b'), (x,y)=>y);
    
    
    var comparFn = (x, y) => {
      return x.toLowerCase() === y.toLowerCase();
    }
    
    /*
    --a--b--a--A--b|
       distinct
    --a--b---------|
    */
    
    var result = foo.distinct(comparFn);
    
    result.subscribe(
      function (x) { console.log('next ' + x); },
      function (err) { console.log('error ' + err); },
      function () { console.log('done'); },
    );
      
      /*
    "next a"
    "next b"
    "done"  
      */

    with FlusherFn:

    var foo = Rx.Observable.interval(500).take(5)
      .zip(Rx.Observable.of('a','b','a','A','b'), (x,y)=>y);
    
    
    var comparFn = (x, y) => {
      return x.toLowerCase() === y.toLowerCase();
    }
    
    
    var flushFn = Rx.Observable.interval(1100).take(1)
      .concat(Rx.Observable.never());
    
    /*
    --a--b--a--A--b|
    -------0-------- distinct(comparFn, flushFn) --a--b--a-----b|
    */ var result = foo.distinct(comparFn, flushFn); result.subscribe( function (x) { console.log('next ' + x); }, function (err) { console.log('error ' + err); }, function () { console.log('done'); }, ); /* "next a" "next b" "next a" "next b" "done" */
  • 相关阅读:
    express4.x socket
    validator
    服务管理,Dll查看
    复制程序,获取系统信息
    TCP HelloWord
    UDP HelloWord
    [置顶] 一个小马
    注册表编辑
    服务的启动与停止
    自下载运行
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5543920.html
Copyright © 2011-2022 走看看