我正在尝试创建一个与此代码完全相同的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]
}
但我不知道如何让它做其余的事。
答案 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]")
。