代码之家  ›  专栏  ›  技术社区  ›  Dr.PB

在for循环中访问obj

  •  1
  • Dr.PB  · 技术社区  · 7 年前

    objVar = "one";
    varID = ["Result1", "Result2"];
    var one = {
      Result1: 5,
      Result2: 100
    }
    
    for (i = 0; i < varID.length; i++) {
      textID = '#' + varID[i];
      document.querySelector(textID).innerHTML = "??";
    }
    <div id="Result1"></div>
    <div id="Result2"></div>

    代替问号( ?? )我需要得到 objVar[i] . 这是否可以直接(即,没有 a = eval(objVar); a[varID[i]] )?

    4 回复  |  直到 7 年前
        1
  •  1
  •   Rohit Agrawal    7 年前

    [编辑] 如你所说 objVar 也可以改变,这样你就可以 one 对象作为父对象的属性并访问它。如果不是,则可以将其设置为全局并将其用作 window 尽管我不建议创建全局变量。

    可以访问对象的属性 用这样的括号表示:

    var masterObj = {
     one : {
      Result1: 5,
      Result2: 100
     },
     two: : {
      Result1: 5,
      Result2: 100
     },
    }
    
    
    document.querySelector(textID).innerHTML = masterObj[objVar][varID[i]];
    

    document.querySelector(textID).innerHTML = window[objVar][varID[i]];//for global variable
    
        2
  •  1
  •   Jonas Wilms    7 年前
     window[objVar][ varID[i] ]
    

    您应该选择另一个数据结构:

    var lookup = {
     one: {
      Result1: 5,
      Result2: 100
     }
    };
    

    …因为你应该尽量不使用 window 为了任何事。

        3
  •  1
  •   Jai    7 年前

    您可以称之为:

    ... = one[varID[i]];
    

    实际上,objvar可以改变。根据这一点,对象需要访问。

    基于此评论:

    ... = window[objVar][varID[i]]
    

    objVar = "one";
    varID = ["Result1", "Result2"];
    var one = {
      Result1: 5,
      Result2: 100
    }
    
    for (i = 0; i < varID.length; i++) {
      textID = '#' + varID[i];
      document.querySelector(textID).innerHTML = window[objVar][varID[i]];
    }
    <div id="Result1"></div>
    <div id="Result2"></div>

    其他的例子可以使用 Object.keys() :

    objVar = "one";
    
    var one = {
      Result1: 5,
      Result2: 100
    }
    
    Object.keys(window[objVar]).forEach(
         res => document.querySelector('#'+res).innerHTML = one[res]
    )
    <DIV ID=“result1”></DIV>
    <DIV id=“result2”></DIV>
        4
  •  0
  •   Pouria Parhami    7 年前

    我使用console.log进行测试,您可以使用document.queryselector。

    var objVar = {
    
        one: {
            Result1: 5,
            Result2: 100
        },
    
        two: {
            Result3: 12,
            Result4: 13
        }
    
    };
    
    var varID = ["Result1", "Result2"];
    var textID;
    
    //chose object from user or any way you want ...
    var customObject = "one";
    
    
    for (let i = 0; i < varID.length; i++) {
        textID = '#' + varID[i];
        console.log(objVar[customObject][varID[i]]);
    }