【发布时间】:2021-05-14 17:39:48
【问题描述】:
假设我有一个这样的字典(这只是示例数据):
obj = {
name: 'John',
properties: {
age: 42,
address: 'somewhere'
}
}
如果我想修改由变量指定的任意深度的值,该怎么办?
对于深度 1,它将是直接的:
obj[what_to_modify] = new_value
但深度 > 1?
what_to_modify="properties.age"
obj[what_to_modify.split('.')] = new_value
// I KNOW, THIS DOESN'T WORK, IT JUST
// ILLUSTRATES WHAT I WANT TO ACHIEVE
我的解决方案是像这样做一个 foor lop:
let levels = what_to_modify.split('.')
let it = obj
for(let k=0; k < levels.length; k++){
let key = levels[k]
if(k == levels.length -1){
it[key] = new_value
}else{
it = it[key]
}
}
这已经可行,但我想知道:有没有更简单的方法来做到这一点?
说清楚,我不想只读取值,我想修改它,所以Accessing nested JavaScript objects and arrays by string path 和Access property via it's keyPath in Javascript? 不能解决我的问题
重要
接受的答案使用 lodash,但实际上我不应该在我的项目中包含新的依赖项,所以如果 vanilla JS 有任何其他方式,我会将接受的答案更改为。
【问题讨论】:
-
@DamiaanDufaux 如果它允许我修改它,而不仅仅是阅读它会的
-
@mdeamf 和 Damian 一样,但也和我提出的解决方案一样混乱
标签: javascript dictionary