碎碎念:知识点梳理归纳,如果有什么不对的感谢大家指正一起学习!
- 版本为6
- ① reduce
- ② scan
- ③ skip
- ④ switchMap
- ⑤ toArray
① reduce
- 在源 Observalbe 上应用 accumulator (累加器) 函数,然后当源 Observable 完成时,返回累加的结果,可以提供一个可选的 seed 值
- 使用 accumulator (累加器) 函数将源 Observable 所发出的所有值归并在一起, 该函数知道如何将新的源值纳入到过往的累加结果中。
- 返回的 Observable 为由源 Observable 发出的每项应用指定的 accumulator 函数。 如果指定了 seed 值,那么这个值会作为 accumulator 函数的初始值。如果没有指定 seed 值,那么源中的第一项会作为 seed 来使用。
- 函数签名: reduce(accumulator: function, seed: any): Observable
详情:
累加器函数两个参数account:是当前累计值,current:是当前数据,函数返回最新的累计值
例1:计算1-4的总和

例2:给累积值的初始值,这里的种子值为0


例3: 数组形式

② scan
- 对源 Observable 使用累加器函数, 返回生成的中间值, 可选的初始值
- 将所有源发出的数据结合起来, 使用一个累加器函数,该函数知道如何将新的值加入到累加器中。 这就像是reduce, 但是会发出中间的累加值
- 返回一个 Observable, 该 Observable 对每个源 Observable 发出的值使用特定的累加器。 如果seed值提供了, 这个值会被累加器用作初始值。 如果seed值没有被提供, 源数据的第一项会被当做初始值。
- scan的规约函数就是把之前规约的值加上当前数据作为规约结果,每一次上游产生数据的时候,这个规约函数就会被调用,结果传给下游。结果也会被scan保存作为下一次调用函数的account参数

例1:输出1到4的累加值


例2: 数组形式


③ skip
- 返回一个 Observable, 该 Observable 跳过源 Observable 发出的前N个值(N = count)
- 接收一个number类型的count参数
- 上游吐出的数据不够count个,上游完结后,skip产生的Obervable也会立刻完结

例1: 在发送前抛弃第一个数据

例2:filter 特定用法实现skip

④ switchMap
- 将每个源值投射成Observable,然后使用 switch 打平所有的内部 Observables ,该 Observable 会合并到输出 Observable 中, 并且只发出最新投射的 Observable 中的值
- 每次发出值都会取消前一个内部Observable的订阅,订阅新的Observable
- 映射成 observable,完成前一个内部 observable,发出值
弹珠图:

例2:页面上点击才会发出值0,1,2…当新的点击事件过来了就重新开始发送值


例3:

⑤ toArray
- 收集所有源发射,并在源完成时将它们作为阵列发射
- 源完成后获取数组内的所有值
- toArray将等到源 Observable 完成后再发射包含所有发射的数组。当源可观察到错误时,将不会发出任何数组
例1:

相关链接:
reduce
