For循环转换一系列变量

For loop to convert series of variables

本文关键字:变量 一系列 转换 循环 For      更新时间:2023-09-26

我正在尝试创建一个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]
}

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

您可以使用eval,但可能不应该。如果您有明显类似数组的数据,需要逐个元素手动操作,那么您可能应该重新考虑您的方法。

查看Marco van Hylckama Vlieg的博客文章:"Javascript中的变量"。相关片段:

使用所有全局变量都保存在窗口中的事实大堆

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

我们开始了!漂亮,干净,不需要评估()。"

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

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

所以它实际上取决于QuestN变量是什么。它们是<input>元素的id吗?它们是全局变量吗?它们是用var关键字在本地范围内定义的吗?

如果可以更改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要好得多。

我认为,与其为每个索引定义不同的变量,不如保留"quests"数组。

但是,如果要循环,请尝试循环中的eval("Quest" + q + ".text = quests[q]")