欢迎指导与讨论 :)

  前言

    本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第二篇 —— filter过滤。如有错漏,希望大家指出提醒O(∩_∩)O。更详细的资料尽在rxjs官网 【http://reactivex.io/rxjs/manual/overview.htm】与带有demo例子的网站【http://xgrommx.github.io/rx-book/content/observable】。

    本文有关filter操作的内容有:debounce、debounceTime、distinct、distinctKey、distinctUntilChanged、distinctUntilKeyChanged、elementAt、filter、first、ignoreElements、audit、auditTime、last、sample、sampleTime、single、skip、skipUntil、skipWhile、take、takeLast、takeUntil、takeWhile、throttle、throttleTime

  

  一、debounce

    防抖动,只有当另一个Observable发射值时,才取源Obervable的最新数据进行发射,其他数据取消发射。

// 每次点击,且当计时器的最新值未被发射时,才从计时器发射一个值
Rx.Observable.interval( 1000 )
.debounce(( ) => Rx.Observable.fromEvent(document, 'click'))
.subscribe(x => console.log( x ));

  二、debounceTime

    防抖动,一段时间内,只取最新数据进行发射,其他数据取消发射。

// 每隔一秒,输出一个计时器的值
Rx.Observable.interval( 1000 )
.debounceTime( 500 )
.subscribe(x => console.log( x ));

  三、distinct

    去除重复的值。

// 去除重复的值,输出A,B,C,b
Rx.Observable.of('A', 'B', 'C', 'A', 'b', 'B')
.distinct( )
.subscribe( x => console.log( x ))

  四、distinctUntilChanged

    去除连续重复的值

// 去除连续重复的元素,输出A,B,A,B,A
Rx.Observable.of('A', 'B', 'B', 'A', 'B', 'A', 'A')
.distinctUntilChanged( )
.subscribe( x => console.log( x ))

  五、distinctKeyUntilChanged

    去除连续项中,拥有相同给予key值的value的项(有点拗口..请看例子)

let items = [
{ age: 4, name: 'Foo'},
{ age: 7, name: 'Bar'},
{ age: 5, name: 'Foo'},
{ age: 6, name: 'Foo'}
]
Rx.Observable.of( ...items )
.distinctUntilKeyChanged('name')
.subscribe( x => console.log( x )) // 输出
// { age: 4, name: 'Foo'}
// { age: 7, name: 'Bar'}
// { age: 5, name: 'Foo'}

   六、ElementAt

    只发射指定位置的元素

// 下标从0开始,输出 ‘A’
Rx.Observable.of('A', 'B', 'B', 'A', 'B', 'A', 'A')
.elementAt( 3 )
.subscribe( x => console.log( x ))

   七、Filter

    自定义过滤规则,符合才把该值进行发射

// 输出奇数:1,2,5,7,9,1
Rx.Observable.of(1,3,2,5,4,7,6,9,1)
.filter( x => x % 2 !== 0 )
.subscribe( x => console.log( x ))

  八、First

    只输出第一个元素

// 只输出第一个元素,输出:1
Rx.Observable.of(1,3,2,5,4,7,6,9,1)
.first( )
.subscribe( x => console.log( x ))

  九、ignoreElement

    忽略所有值,一个也不发射

// 啥也不输出
Rx.Observable.of(1,3,2,5,4,7,6,9,1)
.ignoreElements( )
.subscribe( x => console.log( x ))

   十、audit、auditTime

    audit:当另一个Observable发射值前,源Observable的值会被忽略,当另一个Observable发射值时,才从源Observable发射一个最新值,然后重复上述过程。

    auditTime:在指定等待时间内,源Observable的值会被忽略,等待结束后,发射一个源Observable的最新值,然后重复上述过程。

    他们与throttle的区别是,第一个值的发射,是先等待再发射,而throttle是先发射第一个值,然后再等待。

// auditTime
// 输出2,5,8,11,13...
Rx.Observable.interval( 1000 )
.auditTime( 2000 )
.subscribe( x => console.log( x ))

  十一、last  

    返回源数据集的最后一个条目

// 返回最后一个条目,输出:5
Rx.Observable.of(1,2,3,4,5)
.last( )
.subscribe( x => console.log( x ))

  十二、sample

    当另一个Observable发射值时,才从源Observable数据集发射一个最新值。

// 每次点击输出一个计时器的最新值
Rx.Observable.interval( 1000 )
.sample( Rx.Observable.fromEvent( document, 'click' ))
.subscribe( x => console.log( x ))

  十三、sampleTime

    每隔一定的时间间隔,发射一个源Observable数据集的最新值。

// 每隔2秒,分别输出 0,2,4,6,8....
Rx.Observable.interval( 1000 )
.sampleTime( 2000 )
.subscribe( x => console.log( x ))

  十四、single

    若源Observable数据集只有一个数据项,则输出该项。若多于一个数据项,则报错

// 输出 1
Rx.Observable.of( 1 )
.single( )
.subscribe( x => console.log( x ))

  十五、skip

    跳过源Observable数据集的n个数据,然后才发射值。

// 跳过开头2个,输出3,4
Rx.Observable.of(1,2,3,4)
.skip( 2 )
.subscribe( x => console.log( x ))

  十六、skipUntil

    忽略源Observable开头的一系列值,直到当另一个Observable开始发射值,才会从源Observable开始发射值

// 3秒后,才每秒发射计时器的值,输出:2,3,4,5,6.....
Rx.Observable.interval( 1000 )
.skipUntil( Rx.Observable.of( 1 ).delay( 3000 ))
.subscribe( x => console.log( x ))

  十七、skipWhile

    忽略源Observable开头的一系列值,直到有一项符合条件,才开始从源Observable的该值开始,开始发射值。

// 输出4,5,3,2,1
Rx.Observable.of( 1, 2, 3, 4, 5, 3, 2, 1)
.skipWhile( x => x < 4 )
.subscribe( x => console.log( x ))

  十八、take

    从源Obervable的开头开始,拿到n个数据项进行发射,其余的数据项将被忽略。

// 每秒输出:0,1,2 后结束
Rx.Observable.interval( 1000 )
.take( 3 )
.subscribe( x => console.log( x ))

   十九、takeLast

    从源Obervable的倒数第一个向前数,拿到n个数据项并进行发射,从开头开始的的数据项将被忽略。

// 输出5,6,7
Rx.Observable.of( 1,2,3,4,5,6,7 )
.takeLast( 3 )
.subscribe( x => console.log( x ))

  二十、takeUtil

    源Observable数据集的第一项开始进行发射,直到另一个Observable开始发射第一个值时,源Observable停止发射值。

// 3秒后停止计时器的值输出
Rx.Observable.interval( 1000 )
.takeUntil( Rx.Observable.of( 1 ).delay( 3000 ))
.subscribe( x => console.log( x ))

  二十一、takeWhile

    从源Observable数据集的第一个数据项开始发射值,直到遇到符合条件的第一个数据项后,停止源Observable数据集的发射

// 输出:1,2,3
Rx.Observable.of( 1,2,3,4,3,2,1)
.takeWhile( x => x < 4 )
.subscribe( x => console.log( x ))

  二十二、throttle

    每当源Observable数据集发射一个数据项时,会等待另一个Observable发射值,在等待期间源Observable的值将被忽略并不会发射,直到另一个Observable发射了一个值时,才把源Observable的最新值进行发射

// 输出0,3,6,9,12.....
// 每次输出一个值,至少等待两秒后,才输出最新值
Rx.Observable.interval( 1000 )
.throttle( x => Rx.Observable.interval( 2000 ))
.subscribe( x => console.log( x ))

  二十三、throttleTime

    每当源Observable数据集发射一个数据项时,会等待n秒,n秒后输出源Observable的最新值。

// 输出0,3,6,9,12.....
Rx.Observable.interval( 1000 )
.throttleTime( 2000 )
.subscribe( x => console.log( x ))

    

rxjs5.X系列 —— filter系列 api 笔记的更多相关文章

  1. 智能合约语言 Solidity 教程系列8 - Solidity API

    这是Solidity教程系列文章第8篇介绍Solidity API,它们主要表现为内置的特殊的变量及函数,存在于全局命名空间里. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应 ...

  2. 【RL系列】Multi-Armed Bandit笔记——UCB策略与Gradient策略

    本篇主要是为了记录UCB策略与Gradient策略在解决Multi-Armed Bandit问题时的实现方法,涉及理论部分较少,所以请先阅读Reinforcement Learning: An Int ...

  3. 【RL系列】Multi-Armed Bandit笔记补充(一)

    在此之前,请先阅读上一篇文章:[RL系列]Multi-Armed Bandit笔记 本篇的主题就如标题所示,只是上一篇文章的补充,主要关注两道来自于Reinforcement Learning: An ...

  4. openresty开发系列11--openresty的api入门

    openresty开发系列11--openresty的api入门 1)ngx_lua模块的hello world编辑nginx下conf配置文件nginx.conf# vi nginx.conf在se ...

  5. jQuery插件库代码分享 - 进阶者系列 - 学习者系列文章

    这些天将原来在网上找的jQuery插件进行了下整理,特此将代码分享出来给大家. 见下图结构. 对目录结构进行了分类.这里是插件列表. 这里总共收集了20来个插件.还有下面未进行划分的. 下面是DEMO ...

  6. VMWare 11安装操作系统 - 初学者系列 - 学习者系列文章

    在2010年的时候,我写过一篇关于VMWare的安装操作系统的博文.但是今天在QQ群里有人问起VMWare安装操作系统的问题,虽然回答了,但是回头看了下当时那篇博文,决定重新写一文. 首先要获取VMW ...

  7. Python Socket API 笔记

    将上节中的C#该成Python版的容易程度大大超出了我的意料之外.从来没有发现,仅仅用灰尘简单的几句话就实现了该程序的主要功能,可见python的简易和强大之处.这里先对SocketAPI 做一下总结 ...

  8. 思科S系列220系列交换机多个漏洞预警

    补天漏洞响应平台近期监测思科官方发布了关于思科 S 系列 220 系列交换机的3个漏洞修复通告,其中包含2个高危漏洞,最高CVSS 3.0评分9.8. 更新时间 2019年 08月 09日 威胁目标 ...

  9. ICC教程 - Flow系列 - 概念系列 - ECO (理论+实践+脚本分享)

    本文转自:自己的微信公众号<集成电路设计及EDA教程> <ICC教程 - Flow系列 - 概念系列 - ECO (理论+实践+脚本分享)> 这篇推文讲一下数字IC设计中的po ...

随机推荐

  1. oracle函数案例以及分页案例

    --日期函数select sysdate from dual--返回两个日期select months_between(to_date('2017-1-7','yyyy-mm-dd'),to_date ...

  2. 【WPF】ChartControl的使用

    一.前言       本月正好做一些关于工程4D,5D的界面展示,正好要用到Dev控件中的ChartControl控件,也就是图表控件. 折腾了两星期完成了一个比较能说的过去的界面吧.(领导要求高,可 ...

  3. 分享api接口验证模块

    一.前言 权限验证在开发中是经常遇到的,通常也是封装好的模块,如果我们是使用者,通常指需要一个标记特性或者配置一下就可以完成,但实际里面还是有许多东西值得我们去探究.有时候我们也会用一些开源的权限验证 ...

  4. jdk安装

    x86 和 x64的安装判别 [root@CentOS ~]# uname -aLinux CentOS 2.6.32-358.el6.i686 #1 SMP Thu Feb 21 21:50:49 ...

  5. html和html5详解

    最近看群里聊天聊得最火热的莫过于手机网站和html5这两个词.可能有人会问,这两者有什么关系呢?随着这移动互联网快速发展的时代,尤其是4G时代已经来临的时刻,加上微软对"XP系统" ...

  6. Struts 2 数据校验要用到的类和两种校验方式以及一些校验问题的解决

    通过继承ActionSupport类来完成Action开发,ActionSupport类不仅对Action接口进行简单实现, 同时增加了验证.本地化等支持 .真实开发中自定义Action都需要继承该类 ...

  7. 新手入门指导:Vue 2.0 的建议学习顺序

    起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script> ...

  8. 业务人员自助BI分析不够用,还要自助数据准备?

    自助式BI工具,可以帮助业务人员充分了解和利用企业数据,通过可视化操作,拖拖拽拽来新建分析,生成可视化的报表,帮助企业决策.但近几年的调查研究发现,拥有强大分析策略和模型的产品,比如Tableau.q ...

  9. 十种MYSQL显错注入原理讲解(一)

    开篇我要说下,在<代码审计:企业级Web代码安全架构>这本书中讲十种MYSQL显错注入,讲的很清楚. 感兴趣请去读完,若处于某种原因没读还想了解,那请继续往下. 1.count,rand, ...

  10. iOS 开发 -----公司测试打包上传流程

    打包iOS应用程序 如果想要将做的iOS应用程序安装到自己的iOS设备上测试.或者安装到别人的iOS设备上,或者想发布到App Store中,先要给应用签名.签名就要有证书,这就需要申请证书的过程了. ...