Skip to content

Ramda.js

ramda 是一个js函数库,易于函数式编程。本文是在 Ramda 函数简介的基础上,处于练习记忆目的重写的,感谢原作者ramda.cn的创始人wangzengdi的提炼。

当前列表基于version: 0.25.0

Links: Ramdajs Ramda中文

LIST 列表

ActionFunction
列表转换map
列表过滤:过滤出符合条件的元素filter
列表过滤:过滤出符合条件的元素reject
列表折叠:从左向右对所有元素依次归约(折叠)reduce
列表折叠:从右向左对所有元素依次归约(折叠)reduceRight
列表折叠(增强版)transduce
列表折叠(增强版)uniq
列表去重:对处理后的元素做相等性判断uniqBy
列表去重:通过断言函数(predicate)判断uniqWith
列表排序sort
列表翻转reverse
列表翻转concat
列表长度length
列表表头拼接元素prepend
列表表尾拼接元素append
列表指定索引插入元素insert
替换指定索引处的值为经函数变换的值adjust
替换指定索引处的值update
将列表元素转换为其指定的属性值,等价于 R.map(R.prop)pluck
为列表迭代函数添加两个参数:索引和整个列表addIndex
取出特定索引范围内的元素slice
将列表通过分隔符拼接成字符串join
取出第 N 个元素nth
取出前 N 个元素take
取出后 N 个元素takeLast
从前往后取出满足条件的元素,直至不满足条件的首个元素止takeWhile
从后向前取出满足条件的元素,直至不满足条件的首个元素止takeLastWhile
删除前 N 个元素drop
删除后 N 个元素dropLast
从前往后删除满足条件的元素,直至不满足条件的首个元素止dropWhile
从后向前删除满足条件的元素,直至不满足条件的首个元素止dropLastWhile
取出首个元素head
取出末尾元素last
取出前 length - 1 个元素(删除末尾元素)init
取出后 length - 1 个元素(删除首个元素)tail
求差集:{a∣a∈xs ∩ a∉ys}difference
求差集:{a∣a∉xs ∩ a∈ys}without
求差集:根据条件计算第一个列表与第二个列表的差集differenceWith
求对称差集:{(xs ∪ ys) - (xs ∩ ys)}symmetricDifference
求对称差集:根据条件计算所有不属于两个列表交集的元素symmetricDifferenceWith
求交集:{xs ∩ ys}intersection
求交集:从 xs 中挑选出在 ys 中符合条件的元素innerJoin
求并集:{xs ∪ ys}union
求并集:根据条件判断两元素是否重复unionWith
查找列表中首个满足条件的元素find
查找列表中首个满足条件的元素的索引findIndex
查找列表中最后一个满足条件的元素findLast
查找列表中最后一个满足条件的元素findLastIndex
查找给定元素在列表中首次出现时的索引indexOf
查找给定元素在列表中末次出现时的索引lastIndexOf
列表判断:判断元素是否包含在列表中contains
列表判断:判断是否列表中所有元素都满足条件all
列表判断:判断是否列表中所有元素都不满足条件none
列表判断:判断是否列表中存在满足条件的元素any
列表判断:判断列表是否以给定的值开头startsWith
列表判断:判断列表是否以给定的值结尾endsWith
列表分组:按是否符合条件,将元素分为两组partition
列表分组:对列表中元素按指定规则分组groupBy
列表分段:对列表中元素按指定规则分段groupWith
列表分组:对列表中元素按指定规则分组折叠reduceBy
列表分割:在指定索引处splitAt
列表分割:每隔 N 个元素splitEvery
列表分割:按条件分割splitWhen
对两个列表相同位置的元素进行组合zip
对两个列表相同位置的元素进行键值对组合,fromPairs ∘ zipzipObj
对两个列表相同位置的元素按规则进行组合zipWith
由一系列键值对列表创建对象fromPairs
列表彻底扁平化flatten
列表单层扁平化unnest
先对列表内元素做 Kleisli 映射,再做扁平化,flatMap,>>=chain
函子间的自然变化?sequence
将子列表插入列表insertAll
在列表元素之间插入分割元素intersperse
列表转换 + 折叠?into
将 reduce 的迭代过程记录下来mapAccum
将 reduceRight 的迭代过程记录下来mapAccumRight
合并多个对象mergeAll
由两个参数组成列表pair
从 reduce 或 transduce 中提前退出迭代时的值reduced
可以提前退出的 reduce 迭代reduceWhile
列表生成:生成左闭右开的升序数字列表range
列表生成:生成含有 N 个同一元素的列表repeat
列表生成:函数执行 N 次,生成 N 元列表times
列表生成:通过迭代函数生成列表unfold
二维列表行列式转换transpose
二维列表生成xprod

OBJECT 对象

ActionFunction
属性设置assoc
属性按路径设置assocPath
属性删除dissoc
属性按路径删除dissocPath
获取属性值prop
获取属性值,带有默认值propOr
获取路径上的属性值path
获取路径上的属性值,带有默认值pathOr
判断属性是否满足给定的条件propSatisfies
判断属性是否与给定值相等propEq
判断两个对象指定的属性值是否相等eqProps
判断路径上的属性值是否满足给定的条件pathSatisfies
判断路径上的属性值是否与给定值相等pathEq
获取属性值组成的列表props
判断属性是否为给定类型propls
判断多个属性是否同时满足给定的条件where
判断多个属性是否等于给定对应属性值whereEq
删除多个属性omit
提取多个属性pick
提取多个属性pickAll
对列表中元素提取多个属性,模拟 SQL 的 selectproject
提取键值满足条件的属性pickBy
对特定属性进行特定变换evolve
是否包含指定的键has
是否包含指定的键:包括原型链上的键hasIn
键值对换位invertObj
键值对换位:将值放入数组中invert
取出所有的键keys
取出所有的键:包括原型链上的键keysIn
取出所有的值values
取出所有的值:包括原型链上的值valuesIn
透镜:包括属性的 getter 和 setterlens
透镜:指定索引的透镜lensIndex
透镜:指定路径的透镜lensPath
透镜:指定属性的透镜lensProp
透镜:对被 lens 聚焦的属性做变换over
透镜:对被 lens 聚焦的属性进行设置set
透镜:读取被 lens 聚焦的属性值view
Object 版 map,转换函数参数:(value, key, obj)mapObjIndexed
对象合并merge
克隆对象clone
对象合并:对重复的属性值按给定规则合并mergeWith
对象合并:对重复的属性值按给定规则合并mergeWithKey
对象深递归合并:以左侧对象属性为主mergeDeepLeft
对象深递归合并:以右侧对象属性为主mergeDeepRight
对象深递归合并:对重复的非对象类型的值按给定规则合并mergeDeepWith
对象深递归合并:对重复的非对象类型的值按给定规则合并mergeDeepWithKey
创建包含单个键值对的对象objOf
将对象键值对转换为元素为键值二元组的列表toPairs
将对象键值对转换为元素为键值二元组的列表:包括原型链上的键toPairsIn
将二元组的列表转换为对象fromPairs

FUNCTION 函数

FunctionAction
函数组合:纵向,从右往左compose
函数组合:纵向,从左往右pipe
函数组合:纵向o
函数组合:横向converge
函数组合:横向useWith
Kleisili 函数组合composeK
Kleisili 函数组合pipeK
Promise 函数组合composeP
Promise 函数组合pipeP
单位函数:输出等于输入identity
函数柯里化curry
N 元函数柯里化curryN
将柯里化函数 转为 N 元函数uncurryN
柯里化函数的参数占位符__
参数部分调用:从左往右partial
参数部分调用:从右往左partialRight
函数缓存memoize
函数缓存:可以自定义缓存键值memoizeWith
只执行一次的函数once
创建返回恒定值的函数always
恒定返回 true 的函数T
恒定返回 false 的函数F
Applicative Functor 的 ap 方法,<*>ap
将函数作用于参数列表apply
将接受 单列表参数 的函数转为接受 普通参数列表 的函数unapply
将首个参数(函数)作用于其余参数call
绑定函数上下文bind
利用属性值为函数的对象生成同构对象applySpec
将函数列表作用于参数列表juxt
将给定值传给给定函数,CPS: flip($)applyTo
比较函数,一般用于排序comparator
升序比较函数ascend
降序比较函数descend
将函数封装为 N 元函数nArg
将函数封装为一元函数unary
将函数封装为二元函数binary
提取第 N 个参数nthArg
将构造函数封装为普通函数,创建实例时,不需要 new 操作符construct
将构造函数封装为 N 元普通函数,创建实例时,不需要 new 操作符constructN
通过函数名调用函数invoker
创建相应类型的空值empty
判断是否为空值isEmpty
交换函数前两个参数的位置flip
函数提升lift
N 元函数提升liftN
生成单元素列表of
输出等于输入,但产生副作用的函数,一般用于调试tap
异常捕获tryCatch

LOGIC OPERATION 逻辑运算

ActionFunction
判断是否满足所有条件allPass
判断是否满足任一条件anyPass
判断是否同时满足两个条件both
判断是否满足两个条件中的任意一个either
逻辑与操作and
逻辑或操作or
模式匹配,相当于多个 if/elsecond
单个 if/else,cond 的特例ifElse
满足条件,则执行处理函数,否则原样返回输入值,ifElse 的特例when
不满足条件时,执行处理函数,否则原样返回输入值,ifElse 的特例unless
逻辑非操作,参数为布尔值not
对函数返回值取反complement
添加默认值defaultTo
一直计算,直到满足给定条件until
判断给定值是否为该类型的空值isEmpty
判断给定值是否为 null 或 undefinedisNil
返回给定值所属类型的空值empty

RELATIONAL OPERATION 关系运算

ActionFunction
等于equals
完全相等identical
通过规则判断是否相等eqBy
大于gt
大于等于gte
小于lt
小于等于lte
限定有序数据类型的范围clamp
求两个数的较大值max
按规则求两个数的较大值maxBy
求两个数的较小值min
按规则求两个数的较小值minBy
求差集:{a∣a∈xs ∩ a∉ys}difference
求差集:{a∣a∉xs ∩ a∈ys}without
求差集:根据条件计算第一个列表与第二个列表的差集differenceWith
求对称差集:{(xs ∪ ys) - (xs ∩ ys)}symmetricDifference
求对称差集:根据条件计算所有不属于两个列表交集的元素symmetricDifferenceWith
求交集:{xs ∩ ys}intersection
求交集:从 xs 中挑选出在 ys 中符合条件的元素innerJoin
求并集:{xs ∪ ys}union
求并集:根据条件判断两元素是否重复unionWith

COMPUTATION 数学运算

ActionFunction
add
subtract
multiply
divide
加1inc
减1dec
取反negate
列表累加和sum
列表累乘积product
列表平均值mean
列表平均值median
取模:算术mathMod
取模:JSmodulo

TYPE OPERATION 类型操作

ActionFunction
类型判断is
类型描述type
属性类型判断propIs
判断是否为 null 或 undefinedisNil

Released under the ISC License.