簡體   English   中英

如何使用Lodash在JavaScript中以功能方式實現此目的?

[英]How to do this in a functional way in JavaScript using Lodash?

我是函數式編程的新手,我正在嘗試重構我的代碼以免產生副作用。

let keywords = _.get(content, '[0].keywords', []);
keywords = keywords.slice(0, config.keywordLimit);

我正在使用lodash。 我相信您可以將這兩種方法鏈接起來,成為類似這樣的東西。

const keywords = _.get(content, '[0].keywords', []).slice(0, config.keywordLimit);

但是我只是想知道在JavaScript中是否有更實用的方法來做到這一點?

基本上,功能風格是所有關於構圖的。 這是一個示例:

 var get = _.curry(_.flip(_.get), 3); var slice = _.curry(_.flip(_.slice), 3); var comp = function(f, g) { return function(x) { return f(g(x)); } }; var config = { keywordLimit: 2 }; var program = comp( slice(config.keywordLimit, 0), get([], 'x') ) var x = program({ x: ['abc', 'qwe', 'sdf'] }); console.log(x); 
 <script src="https://raw.githubusercontent.com/lodash/lodash/4.17.2/dist/lodash.min.js"></script> 

如果這種提琴不起作用,請使用以下jsbin: http ://jsbin.com/gicocivife/edit?js,console

注意丑陋的curry(flip(get))curry(flip(slise)) 問題是lodash中的函數具有這樣的參數順序,使您無法進行組合。 您的函數希望數據能夠正常工作,對嗎? 因此,此數據的參數必須為最后一個。 因此,您可以組成函數。 我建議看一下Ramda。 不僅從我的角度來看,這對於FP是一個很棒的庫。 這是用它編寫的相同示例。

var config = { keywordLimit: 2 };

var program = compose(
  slice(0, config.keywordLimit),
  view(lensProp('x'))
)

program({
  x: ['abc', 'qwe', 'sdf']
});

問題是,默認情況下函數是咖喱的。 因此,部分應用自然而然。 它還具有鏡頭,這是一個了不起的事情!

暫無
暫無

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

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