使用Ramda Js,我需要创建一个函数,该函数可以使用同一对象上不同属性的值设置一个对象属性.我到目前为止的尝试如下:
var foo = R.set(R.lensProp('bar'), 'foo' + R.prop('foo')); var result = foo({foo:"bar"});
期望的结果:
{foo:"bar", bar:"foobar"}
实际结果:
{foo:"bar", bar: "foofunction f1(a) {... etc"}
很明显,我在这里误解了一些东西,任何有关如何处理这个问题的见解都会受到赞赏.
当一个属性的值取决于另一个属性的值时,镜头不适合.一个lambda可能是最好的:
const foo = o => R.assoc('bar', 'foo' + o.foo, o); foo({foo: 'bar'}); // => {foo: 'bar', bar: 'foobar'}
我刚刚编写了类似@davidchambers的答案,然后制作了一个无点版本,只是为了表明lambda实际上有多简单.而不是抛弃它,这是相比它看起来有多糟糕:
var foo = (obj) => R.assoc('bar', 'foo' + obj.foo, obj); var foo = R.converge(R.assoc('bar'), [R.pipe(R.prop('foo'), R.concat('foo')), R.identity]);
Ramda REPL提供这两个中间版本