For循环转换一系列变量

时间:2012-01-04 08:15:13

标签: javascript arrays loops for-loop

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

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]
}

但我不知道如何让它做其余的事。

4 个答案:

答案 0 :(得分:3)

您可以使用eval,但您可能不应该使用var i=1; window['name' + i] = 'Marco'; document.write('got ' + name1); 。如果你有像元素一样手动操作的明显类似数据的数据,你应该重新考虑你的方法。

查看Marco van Hylckama Vlieg撰写的这篇博文:"Variable Variables in Javascript"。相关摘要:

  

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

{{1}}
     

我们去!很好,干净,没有必要的eval()。“

答案 1 :(得分:1)

我们需要了解更多以向您提供确切的代码,但为了通过字符串来处理变量,它需要是对象的属性。例如

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

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

答案 2 :(得分:1)

如果您可以更改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恕我直言更好。

答案 3 :(得分:0)

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

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