在ramda中组合函数

时间:2017-10-15 06:29:14

标签: javascript ramda.js

我有一个带有两个参数的函数,我想要讨论它,因为它在代码中使用了多一次。这是功能:

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方法。

1 个答案:

答案 0 :(得分:1)

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

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)))