【发布时间】:2016-10-06 19:07:21
【问题描述】:
我对 Ramda 还很陌生,并且仍在尝试围绕某些功能进行思考。目前,我对R.useWith 有点挣扎。
假设我有一个对象数组:
let myArray = [
{
a: 'wat',
b: 'foo'
},
{
a: 'something',
b: 'something_else'
},
{
a: 'booyah',
b: 'duh'
}
];
我想在每个对象上将foo 的属性设置为等于bar。我知道有几种方法可以做到这一点,我只是在尝试学习此功能时将其用作人为的示例。一种方法是:
let setFooToBar = R.assoc('foo')('bar');
let mapMyArray = R.map( R.__, myArray );
所以在这一点上,我有一个函数setFooToBar 需要一个对象,并将属性foo 设置为bar,我有一个函数mapMyArray 需要一个函数,并将映射每个@ 987654330@ 从myArray 到那个函数。因此,正如预期的那样,这是可行的:
mapMyArray( setFooToBar )
现在,我不明白的是,为什么这种方法没有按我预期的方式工作:
let callFirstWithSecond = ( arg1, arg2 ) => arg1( arg2 );
R.useWith(
callFirstWithSecond,
[
R.map( R.__ ),
R.assoc('foo')
]
)( myArray, 'bar' )
我希望这会返回与前一种方法相同的内容,即一个新的对象数组,每个对象的新属性 foo 设置为 bar。但是,它实际上是返回一个新函数。我无法弄清楚我在哪里缺少论点。
提前感谢您的帮助!
【问题讨论】:
标签: javascript functional-programming ramda.js