javascript-使用Ramda镜头更改对象的值属性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-使用Ramda镜头更改对象的值属性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2277字,纯文字阅读大概需要4分钟。
内容图文
![javascript-使用Ramda镜头更改对象的值属性](/upload/InfoBanner/zyjiaocheng/670/0e170eaf527840d495747b96da46c484.jpg)
我想知道如何使用Ramda Lenses更改对象属性.
目前,我的状态很深:
buckets[
blocks[
messages[
replies [
{id: 0, text: 'text 0', value: 'simple value 0'},
{id: 1, text: 'text 1', value: 'simple value 1'},
{id: 2, text: 'text 2', value: 'simple value 2'},
...
]
]
]
]
我有一个基本的有效载荷.我想获取属性和值,并在我的状态下用新值设置旧值,例如使用此有效负载:
{text: ‘new_text’}
or
{value: ‘new_value’}
在我的减速器中,我有:
case SEQUENCES.UPDATE_REPLY_ON_BLOCK :
// payload => {text: 'new_text'}, or {value: 'new_value'}, or anyway...
let key = Object.keys(payload)[0];
let value = payload[key];
return R.over(
R.lensPath(["buckets", 0, "blocks", 0, "messages", 0, "replies", 0, key]),
R.set(value),
state
);
我尝试了Merge:
return R.over(
R.lensPath(["buckets", 0, "blocks", 0, "messages", 0, "replies", 0),
R.merge(payload),
state,
);
但结果相同:状态未修改,我没有错误.
Maybe SOLVED with mergeDeepLeft :
//payload => {value: 'new_value'}
return R.over(
R.lensPath(["buckets", 0, "blocks", 0, "messages", 0, "replies", 0),
R.mergeDeepLeft(payload),
state,
);
解决方法:
你近了问题是R.set和R.over用于两个不同的任务.您不需要在这里.相反,应该设置外部功能,第二个参数是要将镜头设置为的值:
const payload = {text: 'new_text'}
const key = Object.keys(payload)[0];
const value = payload[key];
const state = {buckets: [{blocks: [{messages: [{replies: [{id: 0, text: 'text 0', value: 'simple value 0'}, {id: 1, text: 'text 1', value: 'simple value 1'}, {id: 2, text: 'text 2', value: 'simple value 2'}]}]}]}]}
console.log(
R.set(
R.lensPath(['buckets', 0, 'blocks', 0, 'messages', 0, 'replies', 0, key]),
value,
state,
)
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
当您要基于已经存在的值进行调整时,可以使用over,将函数从旧值传递到新值作为第二个参数.例如,R.over(myLens,R.toUpper,obj):
const payload = {text: 'new_text'}
const key = Object.keys(payload)[0];
const value = payload[key];
const state = {buckets: [{blocks: [{messages: [{replies: [{id: 0, text: 'text 0', value: 'simple value 0'}, {id: 1, text: 'text 1', value: 'simple value 1'}, {id: 2, text: 'text 2', value: 'simple value 2'}]}]}]}]}
console.log(
R.over(
R.lensPath(['buckets', 0, 'blocks', 0, 'messages', 0, 'replies', 0, key]),
R.toUpper,
state,
)
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
内容总结
以上是互联网集市为您收集整理的javascript-使用Ramda镜头更改对象的值属性全部内容,希望文章能够帮你解决javascript-使用Ramda镜头更改对象的值属性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。