我有一个带有两个参数的函数,我想柯里化(Currying)它,因为它在代码中使用了不止一次。这是函数:
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
方法。
最佳答案
有多种方法可以解决这个问题。假设您仍然希望函数柯里化(Currying),最简单的方法是添加参数
const sumByPropName = R.curry((prop, items) => R.compose(R.sum, R.map(R.propOr(0, prop)))(items))
另一种方法是使用 R.defaultTo
映射未定义的值并将它们全部设置为 0
,然后再传递给 sum
const sumByPropName = R.curryN(2, R.compose(R.sum, R.map(R.defaultTo(0)), R.pluck))
最后,您可以自己创建一个 pluckOr
函数,使 sumByPropName
更简洁(尽管肯定有更好的方式来编写 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)))
关于javascript - 合并 ramda 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46752336/