2013-05-30 9 views
0

Я подозреваю, что делаю ошибку в базовом синтаксисе JavaScript.Переменное имя в цикле

var my_array = new Array(10); 

for (var count=0; count<my_array.length; count++) { 
var my_array+count = "This is a variable number "+count+"."; 
document.write(my_array+count); 
} 

Я хочу, чтобы петля, чтобы создать ряд переменных, которые должны быть названы my_array0, my_array1, my_array2, и так далее. Код выше - это то, как я пытался это сделать, но он не работает. Каков правильный способ именования переменной внутри цикла?

EDIT: Я знаю, что могу использовать my_array [count], но это не то, что я ищу. Мне нужно, чтобы иметь возможность называть переменную внутри цикла, используя индекс как часть имени переменной.

+0

Вам нужно сделать 'my_array [count]' вместо 'var my_array + count' – karthikr

+1

Зачем вам нужна серия переменных с этими именами? Что вы пытаетесь сделать здесь? Если вы хотите десять массивов, создайте десять массивов и поместите их в другой массив. Вы знаете, что такое массив? Это вещь, которая содержит список нескольких других вещей. –

+0

Нет, @Ed, то, что я хочу, это переменная, у которой все разные имена. Я буду использовать массив [count] для другой цели в цикле, поэтому мне нужно отделить переменные от массива. –

ответ

2

Эта модель сомнительна, а массив кажется ненужным; Однако, здесь есть один способ сделать это:

var my_array = new Array(10); 

for (var count = 0; count < my_array.length; count++) { 
    window['my_array' + count] = "This is a variable number " + count + "."; 
    document.write(window['my_array' + count]); 
} 
+0

Спасибо, @ Ноа! –

5

Если вы хотите установить элементы массива, используйте [] синтаксис:

var my_array = new Array(10); 

for (var count=0; count<my_array.length; count++) { 
    my_array[count] = "This is a variable number "+count+"."; 
    document.write(my_array[count]); 
} 

Кроме того, при указании только элемент массива, а не сам массив, падение var перед ним !

+0

Это было бы очевидным решением, но это не то, что я хочу, по ряду причин. Я действительно хочу включить число в имя переменнойm, а не использовать my_array [count]. –

+1

@Figaro Если вы хотите создавать переменные с «динамическими именами», вам нужен указатель на область, в которую вы хотите добавить их. Если это глобальная область действия, например, вы можете заменить 'my_array' на' window' внутри цикла 'for', чтобы создать глобальные переменные соответствующего имени. – Sirko

+0

Звучит как шаг в правильном направлении, @ Сирко. Это именно то, что я хочу сделать, переменные с «динамическими именами», но я думаю, что хочу, чтобы они были локальными в области - как я могу это сделать? –

2

Каков правильный способ именования переменной внутри цикла? Вы этого не сделаете.

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

0

Вы должны использовать массив.

var myarray = new Array(); 
myarray[0] = "1"; 
myarray[1] = "2"; 
myarray[2] = "3"; 
0

Вы переопределяете my_array внутри цикла и не получаете доступ к переменной правильно. Попробуйте:

var my_array = new Array(10); 

for (var count=0; count<my_array.length; count++) { 
    my_array[count] = "This is a variable number "+count+"."; 
    console.log(my_array[count]); 
} 

JS Fiddle

0

Вы не можете выполнить на левой стороне оператора присваивания (=), вы можете только назначить. Выполнение, в javascript, происходит с правой стороны.

var my_array = new Array(10); 
var var_hashmap = {}; // create a new object to hold our variables. 

for (var count = 0; count < my_array.length; count++) { 
    var key = "my_array" + count; 
    var value = "This is a variable number " + count + "."; 
    var_hashmap[key] = value; 
    document.write(var_hashmap[key]); 
}; 
0
var my_array = new Array(10); 

for (var count=0; count<my_array.length; count++) 
{ 
    eval("var my_array" + count + " = 'This is a variable number'+count+' and the variable name is my_array'+count"); 

} 

alert(my_array0); 
alert(my_array1); 
alert(my_array2); 
alert(my_array3); 
alert(my_array4); 
alert(my_array5); 
alert(my_array6); 
alert(my_array7); 
alert(my_array8); 
alert(my_array9); 

http://jsfiddle.net/pe97W/4/

+0

downvote? для чего? OP говорит: «EDIT: я знаю, что могу использовать my_array [count], но это не то, что я ищу. Мне нужно, чтобы иметь возможность называть переменную внутри цикла, используя индекс как часть имени переменная «. также говорит «но мой вопрос остается: как использовать переменную count как часть имени переменной в цикле?» - ответил он на первый вопрос. И это вниз? – Sharky

1

И если ни один из предыдущих ответов не устраивает, вы всегда можете использовать eval()

var varName = 'my_array' 
for (var count=0; count<my_array.length; count++) { 
    eval(varName+count +" = This is a variable number "+count+"."); 
} 

Edit: @Noah Фрейтас обеспечивает лучший ответ, без использования eval() ,

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