使用Ramda镜头设置指定对象的结构值

时间:2018-10-09 10:01:45

标签: javascript ramda.js lenses

给出这个镜头:

const obj = {
  foo: ['bar', 'qux']
}

const foo0Lens = R.lensPath(['foo', 0]);

R.setfoo的第一个元素设置为变量对象上的指定值:

R.set(foo0Lens, 'baz')(obj);

我需要一个函数,将指定对象上的foo第一个元素设置为变量值:

const setObjFoo0 = R.flip(R.set(foo0Lens))(obj);    
setObjFoo0('baz');

R.flip可以完成工作,但参数慢动会使代码的表达能力降低。

应该怎么做?我是否缺少有关Ramda镜头的信息?还有其他方法可以方便地使用镜头创建setObjFoo0吗?

1 个答案:

答案 0 :(得分:1)

好吧,这可能更干净:

const setObjFoo0 = R.set(foo0Lens, R.__, obj)

在不使用R.前缀时,它对我的​​理解更好:

const setObjFoo0 = set(foo0Lens, __, obj)

占位符看起来像占位符。

关于从Ramda中删除占位符的讨论零星(免责声明:我是作者之一),但似乎没有什么迫在眉睫。像这样的例子有助于说明有时候使用它会更清洁。