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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.