【发布时间】:2023-04-03 13:09:01
【问题描述】:
我正在尝试使用 Ramda 更新嵌套对象结构中的数组中的值。
我想用名称blah 更新C 中对象的 value 属性
const o = {
A: {
B: {
C: [
{name: 'blah', value: 'blah'},
{name: 'vtha', value: 'blah'},
]
}
}
}
我一直在使用镜头,但它似乎很冗长,我认为我做错了。
理想情况下,我会喜欢返回新对象的东西。
const res = fn(o)
{
A: {
B: {
C: [
{name: 'blah', value: 'vtha'}
{name: 'vtha', value: 'blah'},
]
}
}
}
【问题讨论】:
-
这就是为什么正确的类型比正确的算法更重要的原因:你选择了奇怪的结构,难怪修改它需要奇怪的代码。
-
这是从 api 调用返回的数据。我可以将其拆分为子元素并将其缝合在一起,但更新结构内的值肯定是可以以合理的方式完成的吗?
-
是的,以命令式的方式进行:
const obj = o.A.B.C.find(nested => nested.name === 'blah'); if (obj !== undefined) { obj.value = 'vtha'; }它易于阅读和维护。如有必要 - 将其包装在一个函数中以看起来“实用”。 -
@zerkms 这就是为什么正确的类型比正确的算法更重要的原因。 事实上,另外:正确的类型自然会导致正确的算法。我们需要更多地讨论 Javascript 中的类型。
标签: javascript functional-programming ramda.js