因为我正在处理一个相对较大的对象,我正在尝试动态映射我的对象属性,以便我可以修改我的对象值。所以我想要达到的是......映射这个objProps = [a, b, c]成为这个obj[a][b][c] = value;有没有办法做到这一点?我尝试了,eval(`["a"]["b"]["c"]`)但它说“在任务中无效的左手边”
3 回答
侃侃尔雅
TA贡献1801条经验 获得超16个赞
let obj = {
a: {
b: {
c: 'hey',
}
}}let objProps = ["a", "b", "c"];function findValue(obj, objProps, index = 0) {
if (index > objProps.length-1) return obj;return findValue(obj[objProps[index]],objProps, index+1)}findValue(obj, objProps)let obj = {
a: {
b: {
c: 'hey',
}
}}let objProps = ["a", "b", "c"];function assignValue(obj, objProps, newValue, index = 0) {
console.log(obj)
if (index >= objProps.length-1 && obj[objProps[index]]) {
return obj[objProps[index]] = newValue;
} else {return assignValue(obj[objProps[index]],objProps, newValue, index+1)
}}assignValue(obj, objProps, "asdsa")
繁星coding
TA贡献1797条经验 获得超4个赞
我精心制作的快速解决方案,我相信你可以使用它eval,如果你告诉我们实际价值,我可以尝试并发布一个解决方案
然而对于这个黑客:
let objProps = ['a', 'b', 'c'];let value = ?;let tmp;let result = objProps.reduce((acc, curr) => {
let tmp_v2 = acc;
while (Object.keys(tmp).length > 0) {
tmp_v2 = tmp[Object.keys(tmp_v2)[0]]
}
tmp_v2[curr] = {};
tmp = tmp_v2;
return acc}, {})tmp.c = value;现在result看起来像:
{
"a": {
"b": {
"c": value
}
}}如所想。
添加回答
举报
0/150
提交
取消
