tags:

views:

96

answers:

7

I'm looking for a way to create variables dynamically in javascript

eg

I have a loop

for (i=0;i<15;i++){
}

now I need to create variables dynamically eg var "a"+i for eavh value in the loop. Is this possible and how?

+8  A: 

Since you are dealing with numeric, sequential variables — use an array.

var foo = [];
for (var i = 0; i < 15; i++) {
    foo[i] = something;
}
David Dorward
+4  A: 

To fulfill your exact requirement, I know only eval():

eval("varname"+i+" = 'Hello';");

on the other hand, you could consider using an array. Much cleaner: They don't clutter the global namespace, and you can order variables neatly in groups.

arrayname[i] = value;
Pekka
+1  A: 

It would be unwise to pollute your namespace with such a large number of variables. Use an array instead.

Techpriester
+1  A: 

You can use the evil eval function for this purpose:

for (var i=0; i < 15; i++){
    eval( 'var a' + i + ' = "something"' );
}
Salman A
+1  A: 

window mostly represents the global object on browsers. You can use either that or scope it to your own objects.

var my = {};

for(var i = 0; i < 15; i++) {
    my["a" + i] = "value: " + i;
}

console.log(my.a4); // "value: 4"
Anurag
+7  A: 

If we presume that you will need several variables related to each iteration ([foo1,bar1], [foo2, bar2]...) then there are two approaches

Use arrays

var foo = [], bar = [];
foo[1] = "foo"; 
bar[1] = "bar";

Use an object

var myVars = {};
myVars["foo" + 1] = "foo";
myVars["bar" + 1] = "bar";

That last one could also be written as

 myVars.bar1 = "bar";

Do not use eval as some has suggested.

Sean Kinsey
+1 for mentioing objects and providing nice clean examples.
Pekka
+1  A: 

I would consider using array instead of variables. Array has push method which adds a new element to array.

Grzegorz Gierlik