为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人2483693 2019-04-09 11:18:29
因为我正在处理一个相对较大的对象,我正在尝试动态映射我的对象属性,以便我可以修改我的对象值。所以我想要达到的是......映射这个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")


查看完整回答
反对 回复 2019-05-17
?
繁星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
    }
  }}

如所想。


查看完整回答
反对 回复 2019-05-17
  • 3 回答
  • 0 关注
  • 472 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信