2012-01-04 4 views
0

Я пытаюсь создать цикл, который делает точно такую ​​же вещь, как этот код (задания является массивом):Для цикла преобразовать ряд переменных

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

Но я не знаю, как заставить его сделать все остальное.

ответ

3

Вы можете использовать eval, но вы, вероятно, не должны. Вероятно, вам следует пересмотреть свой подход, если у вас есть такие явно массивные данные, с которыми вы вручную управляете элемент за элементом.

Отметьте это сообщение в блоге от Marco van Hylckama Vlieg: "Variable Variables in Javascript". Соответствующий фрагмент:

... используя тот факт, что все глобальные переменные хранятся в окне массива.

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

Там мы идем! Хороший, чистый и не Eval() необходимо.»

+0

может добавить ссылку .. http://www.i-marco.nl/weblog/archive/2007/06/14/variable_variables_in_javascri – amosrivera

+0

@amosrivera: Спасибо, добавил это к моему ответу. – bobbymcr

0

Я думаю, что вам лучше держать в„массив заданий“, чем определение другую переменную для каждого индекса.

Однако, если вы хотите, чтобы петля попробовать eval("Quest" + q + ".text = quests[q]") в петле.

1

Мы должны были бы знать больше, чтобы дать вам точный код, но для того, чтобы обратиться к переменной по строке, она должна быть свойством объекта. Например

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

Так что действительно зависит от ваших переменных QuestN. Являются ли они идентификаторами <input> элементов? Являются ли они глобальными переменными? Являются ли они определены в локальной области с помощью ключевого слова var?

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 IMHO.

Смежные вопросы