因为我正在处理一个相对较大的对象,所以我希望能够通过定义“路径”来动态修改我的对象值。
let a="x", b="y", c="z"
let objKeys = [a, b, c]
let value = 5
obj = {x:
{y:
{z: 1
}
}
}
我希望能够实现这一目标。
obj[a][b][c] = value;
有什么办法可以做到这一点吗?我试过obj(eval(`["a"]["b"]["c"]`)) = value
但它说“赋值中的左侧无效”。
最佳答案
您可以通过使用数组归约函数来实现此目的:
const objProps = ["a","b","c"]
const value = 5
const newObj = objProps.reverse().reduce((result, curProp)=> (
{
[curProp]: result
}
), value)
console.log(newObj)
这将从 objProps 中的最后一个值开始,将 prop 相互“链接”在一起。因为您想使用名称作为索引,所以使用对象而不是数组。
编辑:好的,所以我再次阅读了您的问题,据我了解,您不想创建新对象,而是通过定义路径来修改大对象内部的值。为此,请查看 lodash。此库有一个方法 set
,您可以在其中提供属性位置的路径并设置新值 ( https://lodash.com/docs/4.17.11#set )。
关于javascript - 如何通过提供对象键数组来动态修改对象值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56175074/