首页 > 其他分享 >30 天精通 RxJS (03):Functional Programming 通用函式

30 天精通 RxJS (03):Functional Programming 通用函式

时间:2023-08-04 17:34:29浏览次数:36  
标签:03 newCourseList title 阵列 30 Programming course map id

RxJS Logo 了解 Functional Programming 的通用函式,能让我们写出更简洁的代码,也能帮助我们学习 RxJS。

读者可能会很好奇,我们的主题是 RxJS 为什么要特别讲 Functional Programming 的通用函式呢? 实际上,RxJS 核心的 Observable 操作观念跟 FP 的阵列操作是极为相近的,只学会以下几个基本的方法跟观念后,会让我们之后上手 Observable 简单很多!

今天的代码比较多,大家可以直接看影片!

ForEach

forEach 是 JavaScript 在 ES5 后,原生就有支持的方法。

原本我们可能要透过 for loop 取出阵列中的每一个元素

	var arr = ['Jerry', 'Anna'];
	for(var i = 0; i < arr.length; i++) {
		console.log(arr[i]);
	}

现在可以直接透过阵列的 forEach 取出每一个元素。

	var arr = ['Jerry', 'Anna'];
	arr.forEach(item => console.log(item));

forEach 是 FP 操作阵列的基本方法,我们可以用这个方法来实作下面三个我们今天要讲的重点分别为 map, filter, concatAll。

Map

试着把 newCourseList 每个元素的 { id, title } 塞到新的阵列 idAndTitlePairs

	var newCourseList = [
		{
			"id": 511021,
			"title": "React for Beginners",
			"coverPng": "https://res.cloudinary.com/dohtkyi84/image/upload/v1481226146/react-cover.png",
			"rating": 5
		},
		{
			"id": 511022,
			"title": "Vue2 for Beginners",
			"coverPng": "https://res.cloudinary.com/dohtkyi84/image/upload/v1481226146/react-cover.png",
			"rating": 5
		},
		{
			"id": 511023,
			"title": "Angular2 for Beginners",
			"coverPng": "https://res.cloudinary.com/dohtkyi84/image/upload/v1481226146/react-cover.png",
			"rating": 5
		},
		{
			"id": 511024,
			"title": "Webpack for Beginners",
			"coverPng": "https://res.cloudinary.com/dohtkyi84/image/upload/v1481226146/react-cover.png",
			"rating": 4
		}
	], idAndTitle = [];
	newCourseList.forEach((course) => {
		idAndTitle.push({ id: course.id, title: course.title });
	});

虽然我们成功的把 newCourseList 转成 idAndTitlePairs,但这样的写法还是显得有点太复杂了,我们可以用更抽象化的方式来完成。

上面我们练习到 newCourseList 转换成一个新的阵列 idAndTitlePairs,这个转换的过程其实就是两件事

  • 遍历 newCourseList 所有的元素
  • 把每个元素的预期值给到新的阵列

把这个过程抽象化成一个方法 map,以下是简化的基本思路:

  1. 我们会让每个阵列都有一个 map 方法
  2. 这个方法会让用户自定义传入一个 callback function
  3. 这个 callback function 会回传用户预期的元素

虽然 ES5 之后原生的 JavaScript 阵列有 map 方法了,但希望读者自我实做一次,能帮助理解。

	// 我们希望每一个阵列都有一个 map 这个方法,所以我们在 Array.prototype 扩充 map function
	Array.prototype.map = function(callback) {
	  var result = []; // map 最後一定會返回一個新陣列,所以我們先宣告一個新陣列

	  this.forEach(function(element, index) {
		  // this 就是呼叫 map 的阵列
		  result.push(callback(element, index));
		  // 执行使用者定义的 callback, callback 会回复使用者预期的元素,所以我们把它 push 这新阵列
	  })

	  return result;
	}

这里用到了 JavaScript 的 prototype chain 以及 this 等观念,可以看此影片了解 TODO!

到这里我们就实作完成 map 的方法了,让我们来试试这个方法吧!

	var idAndTitle = newCourseList
					 .map((course) => {
						 return { id: course.id, title: course.title };
					 });

标签:03,newCourseList,title,阵列,30,Programming,course,map,id
From: https://www.cnblogs.com/xiaojiuwow/p/17606527.html

相关文章

  • #轮廓线dp#HDU 1400 Mondriaan's Dream
    题目传送门分析状压dp会TLE,考虑用轮廓线dp,设\(dp[i][j][S]\)表示现在处理到\((i,j)\)这个位置轮廓线上状态为\(S\)的情况二进制位为1表示左边或者上方有骨牌跨过轮廓线,然后分类讨论转移一下即可代码#include<cstdio>#include<cstring>usingnamespacestd;con......
  • 30万奖金!首个有阿里技术培训支持,让AI落定场景应用的赛事!
     Datawhale 主办方:阿里云视觉开放平台首届AI开发者创新应用赛,以 “无行业不AI“ 为主题,融合阿里云视觉AI、云原生、云存储、小程序云等多项产品技术,专注为行业应用产品及解决方案开发用户提供展示创意和想法的舞台。AI+场景,探索“视觉智能”的无限可能本创新应用赛采用开放式命......
  • Newnode's NOI(P?)模拟赛 第二题 dp决策单调优化
    其实直接暴力O(n3)DP+O2O(n^3)DP+O_2O(n3)DP+O2优化能过…CODEO(n3)O(n^3)O(n3)先来个O(n3)O(n^3)O(n3)暴力DP(开了O2O_2O2)100分代码(极限数据0.5s0.5s0.5s)#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;......
  • ActiveMQ任意文件写入漏洞(CVE-2016-3088)
    ActiveMQ任意文件写入漏洞(CVE-2016-3088)【现实项目遇到过】1.环境搭建cdvulhub-master/activemq/CVE-2016-3088docker-composeup-ddocker-composeconfig#查看靶场环境相关的配置信息docker-composedown#关闭靶场环境环境监听61616端口和8161端口,其中8......
  • 收集 301 医院 451 名老年冠心病患者数据,机器学习模型准确预测患者一年内死亡率
    内容一览:据国际糖尿病联盟(IDF)统计,2021年中国糖尿病患者数量占全球26%。而糖尿病患者血糖长期失控,有极高风险引起冠心病等并发症。近期,湖北省麻城市人民医院研究人员分析比较了多种模型,并用其中表现最优的机器学习模型,预测了中国老年冠心病合并糖尿病或糖耐量受损患者一年内......
  • Answer Set Programming 回答集编程
    什么是ASP?ASP,全称AnswerSetProgramming中文名叫“回答集编程”。实验室学长要我学ASP的时候,我就去百度查了ASP,结果查到了都是这个:ActiveServerPage,意为“活动服务器网页”。我当时就在想:“这个不对啊,这个搞网站的,应该是旁边组系统集成组的事呀”。果然,此ASP非彼ASP。......
  • POJ 1041 John's trip
    \(POJ\)\(1041\)\(John's\)\(trip\)一、题目大意多组数据,输入\(x,y,z\),表示结点\(x\)和结点\(y\)之间有一条序号为\(z\)的边,如果这个无向图中存在欧拉回路,就输出字典序最小的欧拉回路,如果不存在欧拉回路就输出Roundtripdoesnotexist.。当输入00表示一组数据输入结束......
  • 8.03日
    早晨,阳光透过窗户洒进我的房间,温暖的光芒唤醒了我。我舒服地伸了个懒腰,然后起床准备开始新的一天。作为一个夜猫子,早晨对我来说总是有些困难,但在暑假里,我喜欢尽量早起,以便能够充分利用时间。第一件事情是去锻炼身体。我穿上运动装备,戴上耳机,然后出门去附近的公园跑步。清晨的公园......
  • [岗位能力--判断推理1--贾鹏]军队文职2023-01-03之前笔记
    day1 ......
  • 【2023-08-03】不是遗憾
    20:00所食愈少,心愈开,年愈益。所食众多,心愈塞,年愈损焉。                                                 ——张华前几天,看到香港表哥发的一个朋友圈,他感慨说:“当你回......