69

How can I use a for loop to dynamically create variables, and be returned.

function createVariables()
{
for ( i=0; i<=20; i++ )
    {
        var account = i;
        return var account + i;
    }
 }

The goal is to have the result below:

var account1;
var account2;
var account3; and etc.....
user763349
  • 847
  • 2
  • 11
  • 13

11 Answers11

116

You should use an array:

function createVariables(){
  var accounts = [];

  for (var i = 0; i <= 20; ++i) {
      accounts[i] = "whatever";
  }

  return accounts;
}

You then have access to accounts[0] through accounts[20].

mikeycgto
  • 3,368
  • 3
  • 36
  • 47
Domenic
  • 110,262
  • 41
  • 219
  • 271
  • idea is to create variables with the strings we have... e.g., I have array var arr = ['myOwnName']; and from this create a variable called , var myOwnName; – spacedev Mar 27 '18 at 12:07
  • You cannot create dynamically new variables, but you might consider using a [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) for this purpose – leun4m Sep 22 '20 at 12:23
27

The only way I know how to do this would be to use the JavaScript eval function.

Something like eval("account" + 1 + "='some value'");

http://www.w3schools.com/jsref/jsref_eval.asp

However, I think @Domenic has a better answer.

BuZZ-dEE
  • 6,075
  • 12
  • 66
  • 96
NotMe
  • 87,343
  • 27
  • 171
  • 245
11

I was unsure about answering an old question however I stumbled across this while seeking an answer myself.

for (var i = 1; i < 11; i++) { // Creating 10 objects
window["Object"+i] = new Object();
}
console.log(Object7); // is not undefined

The above code loops to 10 while creating dynamic objects, as described on https://www.codecademy.com/en/forum_questions/51068e93f73ad4947a005629

whatevermike
  • 194
  • 2
  • 15
  • 3
    Absolutely much better than `eval()` recommandation above. Thanks! – Buraco Apr 02 '19 at 07:49
  • 3
    absolutely not better, node.js doesn't know what window is. Question is about js, nowhere is specified that this only should work in a browser – Roman Aug 25 '19 at 19:50
8

I find this a simplest solution

for (var i = 0; i < 10; i++) {
   this["RONAK"+i] = "MY VAL";
}

Output

RONAK0 = "MY VAL"
RONAK1 = "MY VAL"
RONAK2 = "MY VAL"
...
RONAK9 = "MY VAL"
2

You can use the eval() method to declare dynamic variables as it executes JavaScript statements passed to it.

function createVariables()
{
    for ( i=0; i<=20; i++ )
    {
        var str ="account"+ i+" = undefined";
        //Declaring and Setting dynamic variable to undefined using eval
        eval(str);
    }
}
createVariables();
Pang
  • 9,564
  • 146
  • 81
  • 122
Md Junaid Alam
  • 1,131
  • 13
  • 20
1
let etc = { name: 'foobar', city: 'xyz', company: 'companyName' };

Object.keys(etc).forEach(key=>{
window[`${key.toUpperCase()}`] = new Object(`${etc[`${key}`]}`)
});

console.log("-->"+NAME) //foobar

this is similar to what @whatevermike describes but it does not work in NodeJS because it uses window. :(

Jasp402
  • 402
  • 3
  • 12
0
function createVariables() {
    var accounts = [];
    for (var i = 0; i <= 20; ++i) {
        accounts[i] = "merhaba" + i;
    }
    return accounts;
}
Pang
  • 9,564
  • 146
  • 81
  • 122
Cihan baş
  • 79
  • 5
  • 8
    It would be helpful to add an explanation along with your code, so that OP and others can better understand it. – Charles Oct 13 '16 at 15:14
0

The following code will actually create variables, instead of creating this sort of hash table proposed by @Domenic

    function createVariables(){
        var varName = "accounts";

        for (var i = 0; i <= 20; ++i) {
            eval('var ' + varName + i + ' = ' + '"whatever"' + ';');
        }

        return accounts;
    }
Jaguarfi
  • 122
  • 2
  • 4
0

I was pretty proud of the way I made iterating variables with my code, was going to share it but I think I'll just sort of show you modified version of it.

function variableBuilder() {
   let i = 0;
   while (i <= 20) {
      let accountVariable = "account".concat(i);
      `// variable can even be reassigned here`
      console.log(accountVariable);
      i++;
   }
}

you can use the variable as an iterating variable identifier, in the spot that I suggested; I used this method to build DOM nodes, to create a dynamically built HTML table.

0

we can use map for it.

var map = {};
for (var i = 0; i < 10; ++i) {
  map["nutrient" + i] = "some stuff" + i;
}
console.log(map)

result:

{
  nutrient0: 'some stuff0',
  nutrient1: 'some stuff1',
  nutrient2: 'some stuff2',
  nutrient3: 'some stuff3',
  nutrient4: 'some stuff4',
  nutrient5: 'some stuff5',
  nutrient6: 'some stuff6',
  nutrient7: 'some stuff7',
  nutrient8: 'some stuff8',
  nutrient9: 'some stuff9'
}
0

the easiest method is to use eval and write the variable declaration line inside a loop that follows your conditions

    for (let i = 0; i <= 3; i++) {
          eval(`var variable${i}=${i}`);
          eval(`console.log(variable${i})`)
      }
//Output:
0
1
2
3

You can also console log the values outside as they are declared global with the var keyword