繁体   English   中英

在 ramda 中组合函数

[英]combine functions in ramda

我有一个带有两个参数的函数,我想对其进行柯里化,因为它在代码中使用了不止一次。 这是功能:

const discount = R.sum(R.map(R.propOr('0', 'discount'), invoiceArr));

现在我想给出参数的 (' discount ' & invoiceArr ) 并返回值。 我尝试了另一种方式,如下所示:

const sumByPropName = R.curryN(2, R.compose(R.sum, R.pluck));

但是这种方式没有propOr方法。

有很多方法可以解决这个问题。 假设您仍然希望函数柯里化,最简单的方法是添加参数

const sumByPropName = R.curry((prop, items) => R.compose(R.sum, R.map(R.propOr(0, prop)))(items))

另一种方法是使用R.defaultTo映射未定义的值并将它们全部设置为0 ,然后R.defaultTo sum

const sumByPropName = R.curryN(2, R.compose(R.sum, R.map(R.defaultTo(0)), R.pluck))

最后,您可以自己创建一个pluckOr函数,使sumByPropNamesumByPropName一些(尽管肯定有更好的编写pluckOr

const pluckOr = R.curry((defaultVal, propName, items) => R.map(R.propOr(defaultVal, propName), items))
const sumByPropName = R.curryN(2, R.compose(R.sum, pluckOr(0)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM