温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Ramda.js及传参实例分析

发布时间:2022-07-08 13:57:29 来源:亿速云 阅读:99 作者:iii 栏目:开发技术

这篇“Ramda.js及传参实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Ramda.js及传参实例分析”文章吧。

Function first,Data last

在 lodash 中,我们是这样写的,

var square = n => n * n;
_.map([4, 8], square)

参数在前,执行函数在后。

而在 Ramda 中,强调:函数在前,参数在后。

这样做有什么好处呢?

就是为了更好实现:柯里化。柯里化只需要参数一个一个的在后追加

var R = require('ramda');
R.map(square, [4, 8])
// 等同于
var R = require('ramda');
R.map(square)([4, 8])

再举个栗子:

var R = require('ramda');
const odd = x => x%2 === 1
const data = [3, 5, 6];
R.filter(odd, data); // [3, 5]
// 等同于
R.filter(odd)(data); // [3, 5]
// 也可以延迟调用
const filter1 = R.filter(odd);
// filter1 等待参数的传入
// 后续再传入 data
const filter2 = filter1(data)

如果不借用 Ramda.js , 需要自行实现柯里化,就会显得麻烦:

const _curry = f => a => b => f(a, b)
const odd = x => x%2 === 1
const _filter = _curry( (fn, arr) => arr.filter(fn) );
_filter(odd)([3,5,6]) // [3, 5]

Ramda 非常强调:R.api(fn, data) 这样的范式;

API

来看看 Ramda 有哪些神奇的、好用的、常用的 API~

  • map

map 让每个成员依次执行通过某个函数;

const double = x => x * 2;
R.map(double, [1, 2, 3]); //=> [2, 4, 6]
R.map(double, {x: 1, y: 2, z: 3}); //=> {x: 2, y: 4, z: 6}
  • filter

用于过滤;

const isEven = n => n % 2 === 0;
R.filter(isEven, [1, 2, 3, 4]); //=> [2, 4]
R.filter(isEven, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}
  • add

求和;

R.add(2, 3);       //=>  5
R.add(7)(10);      //=> 17
  • multiply

求积;

R.multiply(2)(5)  // 10
  • compose

函数组合,从右到左;

R.compose(Math.abs, R.add(1), R.multiply(2))(-4)
// |-4*2 + 1|,等于 7
  • pipe

函数组合,从左到右;

var negative = x => -1 * x;
var increaseOne = x => x + 1;
var f = R.pipe(Math.pow, negative, increaseOne)(3,4);
// -(3^4) + 1 ,等于 -80
  • curry

将多个参数转换为单个参数

const addFourNumbers = (a, b, c, d) => a + b + c + d;
const curriedAddFourNumbers = R.curry(addFourNumbers);
curriedAddFourNumbers(1, 2)(3)(4)

Ramda 还有其它丰富的 api,也可以结合 compose/pipe 自定义特定功能函数,用这些方法来简化程序,让代码变成函数式风格;以上的例子都可在 jsrun.net/DTNKp/edit 可以在线运行测试。

以上就是关于“Ramda.js及传参实例分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI