【问题标题】:For loop to convert series of variablesFor循环转换一系列变量
【发布时间】:2012-01-04 08:15:13
【问题描述】:

我正在尝试创建一个与此代码完全相同的 for 循环(quests 是一个数组):

Quest0.text = quests[0]
Quest1.text = quests[1]
Quest2.text = quests[2]
Quest3.text = quests[3]
Quest4.text = quests[4]
Quest5.text = quests[5]
Quest6.text = quests[6]
Quest7.text = quests[7]
Quest8.text = quests[8]
Quest9.text = quests[9]
Quest10.text = quests[10]
Quest11.text = quests[11]
Quest12.text = quests[12]
Quest13.text = quests[13]
Quest14.text = quests[14]
Quest15.text = quests[15]

到目前为止,我得到的只是这个(activeQuests 是数组任务的长度):

var q = 0;
for (q=0; q <= activeQuests; q++) {
    Quest0.text = quests[q]
}

但我不知道如何让它完成剩下的工作。

【问题讨论】:

    标签: javascript arrays loops for-loop


    【解决方案1】:

    您可以使用eval,但您可能不应该使用。如果您有明显类似于数组的数据,并且您正在逐个元素地手动操作,您可能应该重新考虑您的方法。

    查看 Marco van Hylckama Vlieg 的这篇博文:"Variable Variables in Javascript"。相关sn-p:

    ...使用所有全局变量都保存在窗口中的事实 数组。

    var i=1;
    window['name' + i] = 'Marco';
    document.write('got ' + name1);
    

    我们去吧!不错,干净,不需要 eval()。”

    【讨论】:

    【解决方案2】:

    我们需要了解更多信息才能为您提供准确的代码,但为了通过字符串寻址变量,它必须是对象的属性。例如

    window.example = 'hello world';
    alert(window['example']);
    

    所以这真的取决于你的 QuestN 变量是什么。它们是 &lt;input&gt; 元素的 id 吗?它们是全局变量吗?它们是否使用 var 关键字在本地范围内定义?

    【讨论】:

      【解决方案3】:

      如果您可以更改 Quest.. 的定义方式,请将它们定义为数组,以便您可以这样做:

      Quest[q].text = quests[q];
      

      如果您不能,则暂时创建一个 Quest.. 对象数组:

      var QUESTS = [];
      QUESTS[0] = Quest0;
      QUESTS[1] = Quest1;
      QUESTS[2] = Quest2;
      QUESTS[3] = Quest3;
      QUESTS[4] = Quest4;
      QUESTS[5] = Quest5;
      QUESTS[6] = Quest6;
      QUESTS[7] = Quest7;
      QUESTS[8] = Quest8;
      QUESTS[9] = Quest9;
      QUESTS[10] = Quest10;
      QUESTS[11] = Quest11;
      QUESTS[12] = Quest12;
      QUESTS[13] = Quest13;
      QUESTS[14] = Quest14;
      QUESTS[15] = Quest15;
      

      那么你可以这样做:

      for (var q=0; q<=activeQuests; q++) {
          QUESTS[q].text = quests[q]
      }
      

      显然这是一个更丑陋的解决方案,但比eval IMHO 好得多。

      【讨论】:

        【解决方案4】:

        我认为你最好保留“quests”数组而不是为每个索引定义不同的变量。

        但是,如果您想循环尝试 eval("Quest" + q + ".text = quests[q]") 在循环中。

        【讨论】:

          猜你喜欢
          • 2021-03-01
          • 2021-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-28
          • 2021-10-15
          相关资源
          最近更新 更多