3种操作 :
柯里化后的函数, R.nth, 调用的形式为 :
但没有办法实现先传递 数组对象, 再决定取第几个元素, 此时可以 :
const getNth = R.nth(_)(array)
getNth(666)
传递 _ 给 R.nth 函数的第一个参数作为占位符
R.adjust(R.add(10), 1, [1, 2, 3]);
R.adjust(R.add(10))(1)([1, 2, 3]);
// => [1, 12, 3]
按照一个 specifiction (Object type or structure) 创建一个新对象
可以用来做对象的转换, 或者从多个对象生成新对象的操作
var getMetrics = R.applySpec({
sum: R.add,
nested: { mul: R.multiply }
});
getMetrics(2, 4); // => { sum: 6, nested: { mul: 8 } }
限制一个参数(数字, 字符串, date)的范围, 内部用 > < 来比较
R.clamp(1, 10, -5) // => 1
R.clamp(1, 10, 15) // => 10
R.clamp(1, 10, 4) // => 4
你 true 我 false, 你 false 我 true, emmmmmmm
var isNotNil = R.complement(R.isNil);
isNil(null); //=> true
isNotNil(null); //=> false
isNil(7); //=> false
isNotNil(7); //=> true
pipe 是一对
compose 是将给定的值从右到左顺序执行函数
pipe 是从左到右R.compose(Math.abs, R.add(1), R.multiply(2))(-4) //=> 7
很有意思的函数 : 匹配到某个规则时, 执行对应的函数 传入的参数是 [ [规则判断函数, 匹配上时执行的函数], [规则判断函数, 匹配上时执行的函数], [规则判断函数, 匹配上时执行的函数], ]
parital application, (还有很有趣的 反柯里化)
将多参数的函数, 转换为 单参数链式调用的形式, (其实就是逐步传参,逐步缩小函数的适用范围,逐步求解的一个过程) 初看确实很 迷幻const add = add(a, b) => a + b
const curryAdd = R.curry(add)
curryAdd(1)(3) // => 4
dissoc assoc omit pick pluck prop props 修改属性, 返回新对象
groupBy 按一个函数将列表元素分为不同的组
逻辑运算 : ifElse cond neither is and or none not anyPass allPass equals eqBy all any
memoize
path pathOr
reduce
insert remove
uniqWith
lift 很棒棒的解释
tap
type
where 可以和 filter find 一起用
Ramda 函数库参考教程 函数式编程入门教程 函数式编程-柯里化和反柯里化 What Function Should I Use?