Ramda.js 函数式编程 (==>在angular中引入)
引入柯里化(Currying):
Currying 为实现多参函数提供了一个递归降解的实现思路——把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数。换句话说,也就是只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。
// 柯里化之前
function add(x, y) {
return x + y;
}
add(1, 2) // 3
// 柯里化之后
function addX(y) {
return function (x) {
return x + y;
};
}
addX(2)(1) // 3
// 另一种用法
var addTen = addX(10);
addTen(2) // 12
var addOne = addX(1);
addOne(5) = 6;
// 这里我们定义了一个 addX 函数,它接受一个参数并返回一个新的函数。
// 调用 addX 之后,返回的函数就通过闭包的方式记住了 addX 的第一个参数。
下文正式开始讲ramda:
1.
ramda是一个建立在JavaScript语言现有功能和算法之上的的扩展。
ramda的官网:https://ramdajs.com/repl/?v=0.23.0。这个网站支持在线测试ramda。
特点:1. ramda的所有方法都支持柯里化;2. Ramda 的数据一律放在最后一个参数,理念是"function first,data last"。
2.
在angular项目中使用:npm install ramda,然后使用 import * as R from 'ramda'
引入 ramda。或者更好的方式是,通过 import { functionName } from 'ramda'
只引入必需的函数。
3.
ramda的API功能有如下几类:比较运算,数学运算,逻辑运算,字符串,函数,数组,对象。具体的请见官网的API文档。
其中特殊的一个是R._,是柯里化函数的参数占位符。
R.__
是一个placehodler,可以让一个函数只传入传入部分参数,由于ramda是自动柯里化的,所以会由被placeholder占位的函数返回一个新的函数来接收被占位的数据。
4.
下面看一个实例感受一下ramda的好处:
拆分一下上述ramda的求值过程:
R.compose
意思是组合,相当于管道的意思,前一个操作的结果是后一个操作的数据,但是与R.pipe
不同的是这个管道是从右向左进行数据流动的
R.contains
是一个判读元素是否在array中,返回一个bool值
R.__
是一个placehodler,可以让一个函数只传入传入部分参数,由于ramda是自动柯里化的,所以会由被placeholder占位的函数返回一个新的函数来接收被占位的数据。
R.path
是从一个属性路径中取出一个值
整个表达式的意思就是,过滤myarray,条件是满足 name.lastname 的值在 [‘jak’,’Jonh’,’M’] 中。
上一篇: php怎样将浮点数转为整数
下一篇: 附近小程序几公里范围内可以搜到