javascript - 合并 ramda 中的函数

标签 javascript ramda.js

我有一个带有两个参数的函数,我想柯里化(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/

相关文章:

javascript - Ramda.js 如何用挖掘对象进行采摘

javascript - 按属性使用 ramda 组并对指定属性求和结果

javascript - 从另一个数组更新一个数组中的属性的功能方法?

javascript - Backbone.js 获取无法正常工作

javascript - API调用和回调

javascript - 如何根据 URI 中的 # 显示选定的选项卡?

javascript - Ramda - R.both 带有柯里化(Currying)谓词

javascript - 如何在javascript中获取焦点元素的Id

javascript - 在 xpages 中加载引导模式

javascript - Ramda JS : How to perform a map where I call R. 替换每个对象的给定属性?