簡體   English   中英

如何正確使用 ES6 進行咖喱?

[英]How to properly curry with ES6?

說我有,

const toUpperCase = word => word.toUpperCase();
const reverse = word => word.split('').reverse().join('')
const toLowerCase = word => word.toLowerCase();

我怎么能做這樣的事情,

const transformWord = word => toUpperCase(word) => reverse(word) => toLowerCase(word)
console.log(transformWord('abcdefg')) // expected output: gfedcba

您可以使用一組函數並reduce它們:

 const toUpperCase = word => word.toUpperCase(); const reverse = word => word.split('').reverse().join('') const toLowerCase = word => word.toLowerCase(); const transformWord = word => [toUpperCase, reverse, toLowerCase].reduce((lastVal, fn) => fn(lastVal), word); console.log(transformWord('abcdefg')) // expected output: gfedcba

還有管道運營商的提議,它使這看起來更整潔,但距離實施還有很長的時間(它仍然是第 1 階段):

const transformWord = word => word |> toUpperCase |> reverse |> toLowerCase;

您可以采用管道函數,通過使用參數來減少給定的函數。

 const pipe = (...functions) => input => functions.reduce((acc, fn) => fn(acc), input), toUpperCase = word => word.toUpperCase(), reverse = word => word.split('').reverse().join(''), toLowerCase = word => word.toLowerCase(), transformWord = pipe(toUpperCase, reverse, toLowerCase); console.log(transformWord('abcdefg')) // expected output: gfedcba

我不明白這與柯里化有什么關系。 我認為你只是在尋找函數組合:

const transformWord = word => toLowerCase(reverse(toUpperCase(word)))
const toUpperCase = word => word.toUpperCase();
const reverse = word => word.split('').reverse().join('')
const toLowerCase = word => word.toLowerCase();

const transformWord = word => toLowerCase(reverse(toUpperCase(word)));
console.log(transformWord('abcdefg')) //Output: gfedcba

使用遞歸方法來編寫咖喱函數。 Curry 函數返回一個函數,如果你傳遞轉換函數,當你傳遞單詞時,它將所有的轉換並返回結果單詞。 最后唯一的事情必須是詞。

transformWord(processA)(processB)(processN)(word)

 const toUpperCase = word => word.toUpperCase(); const reverse = word => word.split('').reverse().join('') const toLowerCase = word => word.toLowerCase(); const transformWord = arg => { const queue = [arg]; const curry = item => { if (typeof item === "string") { let word = item; while (queue.length > 0) { const transform = queue.shift(); word = transform(word); } return word; } else { queue.push(item); return curry; } }; return curry; }; console.log(transformWord(toUpperCase)(reverse)(toLowerCase)("abcdefg")); console.log(transformWord(toUpperCase)("abcdefg"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM