Ramda库的常见方法使用与组合

在程序开发过程中,会用到很多的库,常见的工具库比如lodashramda等等,用起来非常的方便,为了加深理解,在了解了ramda库之后,觉得其设计在一些场景下或功能需求下,结合ramda库实现一些基本的函数组合或对某方法的理解和记录。

0x00 简单认识Ramda

在中文文档上的一句描述:“Ramda 的目标更为专注:专门为函数式编程风格而设计,更容易创建函数式 pipeline、且从不改变用户已有数据”。

“函数式编程”是一种”编程范式”(programming paradigm),也就是如何编写程序的方法论。它属于”结构化编程”的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。

而函数式编程使得我们的编程更加的“简洁、优雅”,由于其范式的思想,纯函数可理解为一个等式,每次输入相同的参数,输出的结果永远是一样的,是没有“副作用”


0x01 判断变量是否为空

/**
 * 判断变量是否为空,undefined、null、''、{}、[]
 * @param {any} param
 * @returns {boolean} true/false
 */
export const isEmptyOrNull = (val) => R.anyPass([R.isEmpty, R.isNil])(val)

0x02 找到对象数组中首个某属性是指定值的下标

/**
 * 找到对象数组首个是某属性的下标
 * @param {string} propName
 * @param {string|number} propVal
 * @param {Array<object>} list
 * @returns {number} -1/number
 */
export const findIndexInList = (propName, propVal, list) => R.findIndex(R.propEq(propName, propVal))(list);

0x03 计算对象数组中某属性的值的和

/**
 * 计算对象数组中某属性的值的和
 * @param {string|number} propName
 * @param {Array<object>} list
 * @returns {number} number
 */
export const propSum = (propName, list) => R.sum(R.pluck(propName))(list);
// 或者
export const propSumV2 = (propName, list) => R.compose(R.sum, R.pluck(propName))(list);
// 或者
export const propSumV3 = (propName, list) => R.pipe(R.pluck(propName), R.sum)(list);
// 或者
const sum = R.reduce(R.add, 0);
export const propSumV4 = (propName, list) => R.compose(sum, R.pluck(propName))(list);

0x04 逻辑条件判断

/**
 * 条件判断:且,这里判断一个参数是否是小于等于5且大于等于0
 * @param {number} val
 * @returns {boolean} true/false
 */
export const bothSatisfy = val => R.both(R.lte(R.__, 5), R.gte(R.__, 0))(val);

0x05 未完待续…


Reference:

发表评论 / Comment

用心评论~