[英]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.