5

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?

2
  • 2
    Can you just use an array? var array = []; for (i=0;i<15;i++){array[i] = ...}? Commented May 24, 2010 at 9:28
  • Array is the most suitable candidate here. It is unwise to use a lot of such variables in Javascript. Commented May 24, 2010 at 9:33

7 Answers 7

9

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

var foo = [];
for (var i = 0; i < 15; i++) {
    foo[i] = something;
}
Sign up to request clarification or add additional context in comments.

Comments

8

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.

1 Comment

@nemesisdesign I didn't say it was evil, just that it doesn't belong in this use case. eval is only 'evil' if used wrong, so don't listen to everything The Crock says..
4

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;

Comments

1

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

Comments

1

You can use the evil eval function for this purpose:

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

Comments

1

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"

Comments

1

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.