来自javascript对象的额外一些属性并将它们传递给函数

时间:2017-04-20 23:22:55

标签: javascript functional-programming ramda.js

我正在寻找一个功能或一组功能来通过ramda执行工作。这是问: -

我有一个对象,我希望通过" pipe"函数,从该对象中提取少量参数,并将这些参数的值传递给函数。

例如

import {pipe} from 'ramda'
const obj = {
  a: 1,
  b: 2,
  c: 3,
  d: 4
}

const sum = (val1, val2) => val1 + val2

pipe(<extract a,b from obj> and pass it to sum function) ??

非常感谢任何形式的帮助。

感谢

1 个答案:

答案 0 :(得分:3)

尝试使用pipe的问题在于它(如compose)只将一个参数传递给除第一个函数之外的任何函数。您可以使用apply解决此问题,使您的函数接受单个数组中的参数,并使用props提取该数组:

pipe(props(['a', 'b']), apply(sum))(obj); //=> 3

另一种方法是使用某种特定于Ramda的converge函数:

converge(sum, [prop('a'), prop('b')])(obj) //=> 3

但也许更好的是更标准的lift

lift(sum)(prop('a'), prop('b'))(obj); //=> 3

您可以在 Ramda REPL 中看到这一切。