使用 Ramda 镜头为指定对象设置结构值
Set structure value for specified object with Ramda lens
给定这个镜头:
const obj = {
foo: ['bar', 'qux']
}
const foo0Lens = R.lensPath(['foo', 0]);
R.set
将 foo
第一个元素设置为变量对象的指定值:
R.set(foo0Lens, 'baz')(obj);
虽然我需要一个函数将指定对象上的 foo
第一个元素设置为变量值:
const setObjFoo0 = R.flip(R.set(foo0Lens))(obj);
setObjFoo0('baz');
R.flip
完成了工作,但参数调整使代码的表现力下降。
应该怎么做?我是否缺少有关 Ramda 镜头的信息?有没有其他方法可以方便地用镜头创建setObjFoo0
?
好吧,这可能更干净:
const setObjFoo0 = R.set(foo0Lens, R.__, obj)
在不使用 R.
前缀的情况下,我觉得读起来更好:
const setObjFoo0 = set(foo0Lens, __, obj)
那里的占位符看起来像一个占位符。
零星地谈论从 Ramda 中删除占位符(免责声明:我是作者之一),但似乎没有什么是迫在眉睫的。像这样的例子有助于证明有时使用它会更干净。
给定这个镜头:
const obj = {
foo: ['bar', 'qux']
}
const foo0Lens = R.lensPath(['foo', 0]);
R.set
将 foo
第一个元素设置为变量对象的指定值:
R.set(foo0Lens, 'baz')(obj);
虽然我需要一个函数将指定对象上的 foo
第一个元素设置为变量值:
const setObjFoo0 = R.flip(R.set(foo0Lens))(obj);
setObjFoo0('baz');
R.flip
完成了工作,但参数调整使代码的表现力下降。
应该怎么做?我是否缺少有关 Ramda 镜头的信息?有没有其他方法可以方便地用镜头创建setObjFoo0
?
好吧,这可能更干净:
const setObjFoo0 = R.set(foo0Lens, R.__, obj)
在不使用 R.
前缀的情况下,我觉得读起来更好:
const setObjFoo0 = set(foo0Lens, __, obj)
那里的占位符看起来像一个占位符。
零星地谈论从 Ramda 中删除占位符(免责声明:我是作者之一),但似乎没有什么是迫在眉睫的。像这样的例子有助于证明有时使用它会更干净。