map介绍:

import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/map';// 第一种
const source$ = Observable.of(3, 1, 4);
const mapFunc = function(value, index) { return `${value} ${this.separator} ${index}`;
};
const context = {separator: ':'};
const result$ = source$.map(mapFunc, context);
result$.subscribe(console.log,null,() => console.log('complete')
);// 解释说明:mapFunc这个函数是map的第一个参数,充当project的功能,同时,map还有第二个参数context对象,如果用上这个参数,那么mapFunc在每次执行的时候,this就是map的这个参数context,所以,在mapFunc中this.separator的值就是冒号(:)// 第二种
const source$ = Observable.of(3, 1, 4);
const context = {separator: ':'};
const mapFunc = (function (separator) {return function(value, index) {return `${value} ${separator} ${index}`;};
})(context.separator)
const result$ = source$.map(mapFunc);
result$.subscribe(console.log,null,() => console.log('complete')
);// 解释说明:并不建议使用第一种方式,按照函数式编程的原则,应该尽量让函数成为纯函数,如果一个函数的执行依赖于this,那么就难以预料这个函数的执行结果,并不是什么好事。所以,我们知道map有这个功能,但要尽量避免使用它
// 利用一个立即执行的函数产生一个新的函数mapFunc,这样既定制了mapFunc中使用的separator,又保持了函数体内代码的纯洁

运行结果:

map源码介绍:

var map_1 = require('../operators/map');function map(project, thisArg) {return map_1.map(project, thisArg)(this);
}// map_1
export declare function map<T, R>(this: Observable<T>, project: (value: T, index: number) => R, thisArg?: any): Observable<R>;

mapTo介绍:

import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/mapTo';// import 'rxjs/add/operator/map';const source$ = Observable.of(3, 1, 4);
// 使用mapTo
const result$ = source$.mapTo('ABC');// 使用map
// const result$ = source$.map(() => 'ABC');result$.subscribe(console.log,null,() => console.log('complete')
);

运行结果:

mapTo源码介绍:

Observable.prototype.mapTo = function (value) {return this.map(x => value);
};

pluck介绍:

import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/pluck';const source$ = Observable.of({name: 'RxJS', version: 'v4'},{name: 'React', version: 'v15'},{name: 'React', version: 'v16'},{name: 'RxJS', version: 'v5'}
);
const result$ = source$.pluck('name');
result$.subscribe(console.log,null,() => console.log('complete')
);

运行结果:

pluck源码介绍:

var pluck_1 = require('../operators/pluck');function pluck() {var properties = [];for (var _i = 0; _i < arguments.length; _i++) {properties[_i - 0] = arguments[_i];}return pluck_1.pluck.apply(void 0, properties)(this);
}// pluck_1
export declare function pluck<T, R>(this: Observable<T>, ...properties: string[]): Observable<R>;

pluck优点:能够自动处理获取不存在的字段,返回undefined。如使用map,将抛出一个错误:throw new TypeError。。。。

import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/pluck';const source$ = Observable.of({name: 'RxJS', version: 'v4'},{name: 'React', version: 'v15'},{name: 'React', version: 'v16'},{name: 'RxJS', version: 'v5'}
);
const result$ = source$.pluck('age');
result$.subscribe(console.log,null,() => console.log('complete')
);

运行结果:

从以上demo可以看到:map是映射操作之母,mapTo和pluck都可以基于map实现。

转化类操作符:map、mapTo和pluck相关推荐

  1. (六)温故知新系列之RXJS——RXJS操作符基础(转化类)

    前言 合并类操作符把多个数据流汇合为⼀个数据 流,但是汇合之前数据是怎样,在汇合之后还是那样:过滤类操作符可以 筛选掉⼀些数据,其中回压控制的过滤类操作符还可以改变数据传递给下 游的时间,但是数据本⾝ ...

  2. Java实体类转Map、Map转实体类

    创建utils(EntityUtils.java) package com.jeff.utils;import java.lang.reflect.Field; import java.util.Ha ...

  3. 初识RxJava(三)转换类 操作符

    前言: 昨天的两篇介绍了 RxJava 的创建类操作符和延时类操作符,今天笔者记录一下 转换类 操作符,不太监了 ,开始记笔记.对了具体不太清楚转换过程的 可以去拜读 这位大佬 Season_zlc ...

  4. C++ 笔记(24)— STL map 类(map实例化、插入、查找、删除)

    1. STL 映射类简介 map 和 multimap 是键-值对容器,支持根据键进行查找,区别在于,后者能够存储重复的键,而前者只能存储唯一的键. 为了实现快速查找, STL map 和 multi ...

  5. ASP常用进制转化类(2,8,10,16,32,64)

    <% ' 名称:HDOBTools ' 描述:进制转化类 ' 作用:用于各种进转的转化 Class HDOBToolsPrivate hdobHackPrivate Sub Class_Init ...

  6. RxJava进阶一(创建类操作符)

    RxJava进阶一(创建类操作符) RxJava进阶二(转换类操作符) RxJava进阶三(过滤类操作符) RxJava进阶四(组合类操作符) 前面已经对RxJava原理进行介绍,相信大家对于RXJa ...

  7. 【C/C++学院】(8)全局函数和类成员函数转化/友元/操作符重载

    1.全局函数和类成员函数转化 全局函数和成员函数的相互转化:只需要修改一个指向本类的this指针: #include <iostream> using namespace std;clas ...

  8. .NET框架-LINQ 9类操作符使用举例

    Linq标准查询操作符 语言集查询 Ganmge hteg.ratedQuw,LINQ,集 成了C#编程语言中的查询语法 ,可 以用相同的语法访问不同的数据源. LINQ提 供了不同数据源的抽象层 , ...

  9. Hibernate addScalar() addEntity() setResultTransformer() 返回的数据集合转为指定类或Map 等 使用以及学习总结

    一般的list 返回值 通常情况下如果我们直接使用了sqlquery 的 .list() 方法,返回的结果将为一个 Object[] 数组,如果字段不多还好,如果很多,那么手动一个个转换将会十分麻烦, ...

最新文章

  1. mysql查看修改字符集
  2. JavaScript实现冒泡排序 可视化
  3. flash 异常修复:QQ 的 flash 图标显示异常?QQ 秀、表情加载异常?一招解决
  4. geoserver rest 导入shape文件错误
  5. html外联内联,HTML内联元素
  6. vnpy学习_02各文件功能梳理
  7. 通过python爬取数据
  8. python解决单调栈问题
  9. SpringSecurity OAuth2+JWT+网关实现认证授权中心
  10. Oracle数据库学习
  11. Hibernate框架
  12. Unity学习之生命周期函数
  13. Postgres-XL集群的搭建和测试详解
  14. Spring Cloud Alibaba教程:使用Nacos作为配置中心
  15. Python:PIL库中getpixel()-方法的使用
  16. Java Web基础知识之安全:人生苦短,注意安全
  17. Latex-TiKZ绘制数学平面几何图教程
  18. 智慧校园管理系统全套源码 智慧学校源码(小程序端、电子班牌、人脸识别系统)
  19. 工业互联网的基础技术有哪些
  20. 统计数据资源整理:最全中国2010年人口普查数据Excel文件

热门文章

  1. 什么是固定资产管理系统?用固定资产管理系统管理固定资产的好处?
  2. 吾生也有涯,而学也无涯
  3. 微信抢票应用个人总结
  4. SAP MM模块-库存盘点BAPI的使用及注意点
  5. 操作系统——文件存储管理
  6. 软件测试自学怎么学?
  7. 牛年第一瓜!阿里女员工被初中文化男子骗走500多万!开豪车连骗12名女性,被判无期!...
  8. element-ui前端页面消息提示框
  9. linux文件重定向 dup,linux之dup和dup2函数解析
  10. 计算机网络协议有时序,计算机网络协议.doc