有没有办法动态映射变量的对象属性?

因为我正在处理一个相对较大的对象,我正在尝试动态映射我的对象属性,以便我可以修改我的对象值。

所以我想要达到的是......

映射这个

objProps = [a, b, c]

成为这个

obj[a][b][c] = value;

有没有办法做到这一点?我尝试了,eval(`["a"]["b"]["c"]`)但它说“在任务中无效的左手边”


慕码人2483693
浏览 473回答 3
3回答

侃侃尔雅

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

我精心制作的快速解决方案,我相信你可以使用它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     }   }}如所想。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript