2017-10-15 60 views
1

我有一个函数,它需要两个参数,我想咖喱它,因为它在代码中使用了更多次。这里是功能:在拉姆达组合功能

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

有很多方法可以解决这个问题。假设你仍然想要的功能令行禁止,最简单的方式就是让添加的参数

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