lodash 實現JS 函數柯里化

1. 柯里化

在計算機科學中,柯里化(英語:Currying),又譯爲卡瑞化或加里化,是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,並且返回接受餘下的參數而且返回結果的新函數的技術。
柯里化是一種處理函數中附有多個參數的方法,並在只允許單一參數的框架中使用這些函數。例如,一些分析技術只能用於具有單一參數的函數。現實中的函數往往有更多的參數。

2. lodash

一個一致性、模塊化、高性能的 JavaScript 實用工具庫。
Lodash 通過降低 array、number、objects、string 等等的使用難度從而讓 JavaScript 變得更簡單。
Lodash 的模塊化方法 非常適用於:

  • 遍歷 array、object 和 string
  • 對值進行操作和檢測
  • 創建符合功能的函數
  1. lodash 入門
  2. lodash官方文檔

3. _.curry示例

let _  = require('lodash');

let abc = (a,b,c)=>[a,b,c];
let curried = _.curry(abc);

let result = curried(1)(2)(3);
console.log(result);  // => [1, 2, 3]

result = curried(1, 2)(3);
console.log(result);  // => [1, 2, 3]

result = curried(1, 2, 3);
console.log(result);  // => [1, 2, 3]


// Curried with placeholders.
let result2 = curried(1)(_, 3)(2);
console.log(result2);  // => [1, 2, 3]

如上述示例代碼,原先的abc方法接收3個參數。經過柯里化後的curried可以分次接收這三個參數而不需要一次獲取。
另外,_.curry支持佔位符placeholder,使用_作爲佔位符相當於允許參數可以不按照固有的傳參順序進行調用。
比如上述代碼中的curried(1)(_, 3)(2);在這裏先傳入了參數1,在第二個參數還沒有ready的情況下,傳入了一個佔位符_和參數3, 最後傳入第二個參數2不在佔位符的位置。 所以最終的返回結果還是[1,2,3]。

result2 = curried(_)(2,2)(1);
console.log(result2);  // [2,2,1]

result2 = curried(_,2)(3)(1);
console.log(result2) // [2,3,1]
注意

1. _.curry()提供的佔位符_會被其相鄰的下一次函數調用的第一個參數所填充。
2. 必須傳入原函數所需要的所有參數後才能實現函數的調用。當爲傳入全部參數時,其response是一個柯里化的函數。

let curriedFunc = curried(1,2);
console.log(typeof curriedFunc);  // function
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章