Для цикла для преобразования серии переменных - PullRequest
0 голосов
/ 04 января 2012

Я пытаюсь создать цикл 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]

Пока все, что у меня есть, это (активные квесты - это длина квестов в массиве):

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

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

Ответы [ 4 ]

3 голосов
/ 04 января 2012

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

Ознакомьтесь с этой записью в блоге Марко ван Хюлькама: «Переменные в Javascript» . Соответствующий фрагмент:

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

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

Вот и мы! Красиво, чисто и не нужно eval (). "

1 голос
/ 04 января 2012

Если вы можете изменить способ определения 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 ИМХО.

1 голос
/ 04 января 2012

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

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

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

0 голосов
/ 04 января 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...