ramda

reduce

3种操作 :

  1. 遍历
  2. 变形
  3. 累计

_ placeholder

柯里化后的函数, R.nth, 调用的形式为 :

但没有办法实现先传递 数组对象, 再决定取第几个元素, 此时可以 :

const getNth = R.nth(_)(array)
getNth(666)

传递 _R.nth 函数的第一个参数作为占位符

一些有用的函数

  1. adjust 对数组中的第 idx 个元素执行特定的 fn, 替换原来的元素, 返回新数组
R.adjust(R.add(10), 1, [1, 2, 3]);
R.adjust(R.add(10))(1)([1, 2, 3]);     
// => [1, 12, 3]
  1. applySpec

按照一个 specifiction (Object type or structure) 创建一个新对象

可以用来做对象的转换, 或者从多个对象生成新对象的操作

var getMetrics = R.applySpec({
  sum: R.add,
  nested: { mul: R.multiply }
});
getMetrics(2, 4); // => { sum: 6, nested: { mul: 8 } }
  1. clamp

限制一个参数(数字, 字符串, date)的范围, 内部用 > < 来比较

R.clamp(1, 10, -5) // => 1
R.clamp(1, 10, 15) // => 10
R.clamp(1, 10, 4)  // => 4
  1. complement

你 true 我 false, 你 false 我 true, emmmmmmm

var isNotNil = R.complement(R.isNil);
isNil(null); //=> true
isNotNil(null); //=> false
isNil(7); //=> false
isNotNil(7); //=> true
  1. compose 必须掌握的函数, 和 pipe 是一对 compose 是将给定的值从右到左顺序执行函数 pipe 是从左到右
R.compose(Math.abs, R.add(1), R.multiply(2))(-4) //=> 7
  1. cond

很有意思的函数 : 匹配到某个规则时, 执行对应的函数 传入的参数是 [ [规则判断函数, 匹配上时执行的函数], [规则判断函数, 匹配上时执行的函数], [规则判断函数, 匹配上时执行的函数], ]

  1. curry 必须掌握的函数, 又称为 parital application, (还有很有趣的 反柯里化) 将多参数的函数, 转换为 单参数链式调用的形式, (其实就是逐步传参,逐步缩小函数的适用范围,逐步求解的一个过程) 初看确实很 迷幻
const add = add(a, b) => a + b
const curryAdd = R.curry(add)
curryAdd(1)(3) // => 4
  1. dissoc assoc omit pick pluck prop props 修改属性, 返回新对象

  2. groupBy 按一个函数将列表元素分为不同的组

  3. 逻辑运算 : ifElse cond neither is and or none not anyPass allPass equals eqBy all any

  4. memoize

  5. path pathOr

  6. reduce

  7. insert remove

  8. uniqWith

  9. lift 很棒棒的解释

  10. tap

  11. type

  12. where 可以和 filter find 一起用

Ref

Ramda 函数库参考教程 函数式编程入门教程 函数式编程-柯里化和反柯里化 What Function Should I Use?