您好,登錄后才能下訂單哦!
這篇“Ramda.js及傳參實(shí)例分析”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Ramda.js及傳參實(shí)例分析”文章吧。
在 lodash 中,我們是這樣寫的,
var square = n => n * n; _.map([4, 8], square)
參數(shù)在前,執(zhí)行函數(shù)在后。
而在 Ramda 中,強(qiáng)調(diào):函數(shù)在前,參數(shù)在后。
這樣做有什么好處呢?
就是為了更好實(shí)現(xiàn):柯里化。柯里化只需要參數(shù)一個(gè)一個(gè)的在后追加
var R = require('ramda'); R.map(square, [4, 8]) // 等同于 var R = require('ramda'); R.map(square)([4, 8])
再舉個(gè)栗子:
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] // 也可以延遲調(diào)用 const filter1 = R.filter(odd); // filter1 等待參數(shù)的傳入 // 后續(xù)再傳入 data const filter2 = filter1(data)
如果不借用 Ramda.js , 需要自行實(shí)現(xiàn)柯里化,就會(huì)顯得麻煩:
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 非常強(qiáng)調(diào):R.api(fn, data)
這樣的范式;
來看看 Ramda 有哪些神奇的、好用的、常用的 API~
map
map 讓每個(gè)成員依次執(zhí)行通過某個(gè)函數(shù);
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
函數(shù)組合,從右到左;
R.compose(Math.abs, R.add(1), R.multiply(2))(-4) // |-4*2 + 1|,等于 7
pipe
函數(shù)組合,從左到右;
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
將多個(gè)參數(shù)轉(zhuǎn)換為單個(gè)參數(shù)
const addFourNumbers = (a, b, c, d) => a + b + c + d; const curriedAddFourNumbers = R.curry(addFourNumbers); curriedAddFourNumbers(1, 2)(3)(4)
Ramda 還有其它豐富的 api,也可以結(jié)合 compose/pipe 自定義特定功能函數(shù),用這些方法來簡(jiǎn)化程序,讓代碼變成函數(shù)式風(fēng)格;以上的例子都可在 jsrun.net/DTNKp/edit 可以在線運(yùn)行測(cè)試。
以上就是關(guān)于“Ramda.js及傳參實(shí)例分析”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。