使用ramda防止重复代码

时间:2017-10-12 13:11:20

标签: javascript ramda.js

我使用ramda在同一列表中列出了相同的操作,如下所示:

 size: { sum: R.sum(R.map(R.prop('size'), ordersRep)) },
      price: { sum: R.sum(R.map(R.prop('price'), ordersRep)) },
      profit: { sum: R.sum(R.map(R.prop('profit'), ordersRep)) },
      discount: { sum: R.sum(R.map(R.prop('discount'), ordersRep)) },

我想定义主要功能:R.sum(R.map(R.prop('somthing'), ordersRep))其他地方并在需要时使用它。但它需要两个参数列表和一个道具名称。我怎么处理它?

1 个答案:

答案 0 :(得分:3)

let combined = (prop, coll) => R.sum(R.pluck(prop, coll))

对于一个可以说更具功能性的版本(Ross Mackay提供免费礼貌):

let combined = prop => R.compose(R.sum, R.pluck(prop))

let sumPrice = combined('price');
sumPrice([{price: 2}, {price: 3}]); // 5

点免费:

let combined = R.curryN(2, R.compose(R.sum, R.pluck));