因为我正在处理一个相对较大的对象,我正在尝试动态映射我的对象属性,以便我可以修改我的对象值。所以我想要达到的是......映射这个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
提交
取消