I am trying to combine a string and number to a dynamiclly generated variable.
Currently tried it this way:
const ElementCount = 2;
for (i = 1, i <= ElementCount, i++) {
let SampleVariable[i] = "test";
}
ElementCount will later on be dynamic.
The result of the above function should look like this:
SampleVariable1 = "test"
SampleVariable2 = "test"
My code seems to be wrong - what do I have to change here?
Solution can be native JS or jQuery as well.
Thanks a lot!
solution is to use eval, but It's nasty code, Avoid using 'eval', just use an array or object.
1, eval solution:
const ElementCount = 2;
for (let i = 1; i <= ElementCount; i++) {
eval("let SampleVariable[" + i + "] = 'test'");
}
2, array solution:
const ElementCount = 2;
let Variables = []
for (let i = 1; i <= ElementCount; i++) {
Variables["SampleVariable" + i] = "test";
}
3, object solution:
const ElementCount = 2;
let Variables = {}
for (let i = 1; i <= ElementCount; i++) {
Variables["SampleVariable" + i] = "test";
}
There are few mistakes in your code
You using comma , to separate the statements. You should use semicolon ;
You are declaring SampleVariable inside the for loop so its not avaliable outside. Declare it outside the loop.
You shouldn't use independent variable for this purpose as they just differ by 1. You should store them in array and use SampleVariable[number] to access them.
You should initialize i = 0 otherwise the first element of SampleVariable will be undefined
const ElementCount = 2;
let SampleVariable = [];
for (let i = 0; i < ElementCount; i++) {
SampleVariable[i] = "test";
}
console.log(SampleVariable);
This is my solution
const ElementCount = 2;
for(i = 1; i <= ElementCount; i++) {
this['SampleVariable'+i] = "test";
}
SampleVariable1 // "test" (browser)
this.SampleVariable2 // "test"
Related
I want to create new variables in a for-loop where the variable-name shall contain the index of the loop: pos_1, pos_2...
So I try that:
for(i=1; i<=slide_length;i++){
var pos_[i] = 49*i;
}
But that doesn't create anything. What do I do wrong here?
You can use window["variable_name"] to create global variables.
var slide_length = 5;
for(i=1; i<=slide_length;i++){
window["pos_"+i] = 49*i;
}
console.log(pos_5);
create the array outside the loop.
var pos_ = []
for(i=1; i<=slide_length;i++){
pos_.push(49*i);
}
then pos_ has your values after the loop.
You should use an array:
function createVariables(){
var pos = [];
for (var i = 0; i <= slide_length; ++i) {
pos[i] = 49*i;
}
return pos;
}
You then have access to pos[0] through pos[slide_length].
Following code will be useful to you,
var slide_length = 10;
for(i=1; i<=slide_length;i++){
this['pos_'+i] = 49 * i;
}
console.log(pos_1);
console.log(pos_8);
console.log(pos_10);
this is my code currently:
let array = [`1 (1).jgp`,`1 (2).jgp`,`1 (3).jgp`,`1 (4).jgp`,`1 (5).jgp`,`1 (6).jgp`,`1 (7).jgp`,`1 (8).jgp`,`1 (9).jgp`,`1 (10).jgp`,`1 (11).jgp`]
//rest of the code
Is there a more efficent way of storing the data?
I have tried:
for (i = 0; i < 12; i++) {
let array = [`1`+(i)+`.jgp`]
};
//rest of the code
But, then when I tried to call array it returned:
Uncaught ReferenceError: array is not defined
at :1:1
I also tried:
let array = [`1`+(i = 0; i < 12; i++)+`.jgp`]
//rest of the code
But that returned: Uncaught SyntaxError: Unexpected token ;
Please let me know what I'm doing wrong? Or how I can make this code more efficient.
Thanks,
You can generate the array using Array#from:
const arr = Array.from({ length: 10 }, (_, i) => `1 (${i + 1}).jgp`);
console.log(arr);
Although a simple for loop would work as well:
const array = []; // declare an empty array
for (let i = 1; i <= 10; i++) {
array.push(`1 (${i}).jgp`); // push each item to the array
};
console.log(array);
Is there a more efficent way of storing the data?
You mean store in such a way that less storage is required?
Store in this format
var arrayObj = {
template : "{{i}} ({{i}}).jgp",
startIndex : 1,
endIndex : 10
};
Or how I can make this code more efficient.
If how much storage is used is not the concern, then simply use a simple iterator
var array = [];
for( var counter = 1; counter <= 10; counter++ )
{
array.push( "1 ( " + counter + " ).jgp" );
}
You can do
let array = [];
for (let i = 0; i < 12; i++) {
array.push(`1 (`+i+`).jgp`);
};
console.log(array);
Am I able to use for loop to declare variables? Because declaring variables with similar one by one is not smart.
For example if I want variables like: DATA1, DATA2 and DATA3, I will normally declare it like below:
var data1 = "";
var data2 = "";
var data3 = "";
And the below is what I expect we can do in the actual code.
Using for loop and using "i" to assign number for each variable.
for(var i = 0; i < 3 ;i++){
var data+i = "";
}
am I able to do that? I suppose the above code is not the correct way to do that but just a concept.
You can define Object or Global variable.
var variables = {};
for (var i = 0; i < 3; i++) {
variables['data' + i] = i;
}
console.log(variables);
// you can use it like variables.data0
// by the way you can define global variables as you want
// but note that this pollutes the global space
for (var i = 0; i < 3; i++) {
window['data' + i] = i;
}
// so you can use it like
console.log(window.data0, ' or ', data0)
Because of the fact that javascript is dynamically typed you can do something like that. JavaScript gives you the possibility of accessing variables through a key.
var baseVariable = {};
for(var i = 0; i < 3; i++){
baseVariable["data" + i] = "ValueForData" + i;
}
You can than access these variables pretty easy by iterating through the baseVariabel, or if you now the exact amount you can even call it like that:
baseVariable.data1
You can use eval function to evaluate code from string.
For example:
var a = 2; eval('alert(a)');
Take a look at assignment chain. May be is would be suitable.
var a = b = c = d = e = f = g = "";
But this ways is not a good practice.
As mentioned in comments for your question better way to use array or object to store data.
my question is can i possibly initialize variables repeatedly (with changing only numbers after them) this is my code
for(i = truStorage.getItem('elementCount'); i>0; i--) {
var obj = truStorage.getItem("element_" + i);
var [obj_+i] = element(erd.Entity , obj.posx, obj.posy, obj.text );}
};
basically i just want to initialize a variable like
something_i = "";
and the result will be like this
var element_1 = element(erd.Entity, 100, 200, "Employee");
var element_2 = element(erd.Entity, 100, 400, "Salesman");
var element_3 = element(erd.WeakEntity, 530, 200, "Wage");
var element_4 = element(erd.IdentifyingRelationship, 350, 190, "gets paid");
im not trying to use variables as a storage but rather to instantiate an element for a function.
This is a job for an array.
var something = [];
var somethings = 5;
for(var i = 0; i < somethings; i++) {
something[i] = "";
}
You should now be able to access the five values like this:
console.log(something[0])
console.log(something[1])
console.log(something[2])
console.log(something[3])
console.log(something[4])
Notice you use 0 to access the first element. That's just how it is because JavaScript arrays are zero-based.
This is best scenario to use array:
var counter=0,something = new Array();
for(i = truStorage.getItem('elementCount'); i>0; i--) {
something[counter] = truStorage.getItem("element_" + i).text;
counter++;
}
};
Try:
for(var i=1; i<=4; i++) {
this["something_" + i] = i;
}
console.log(something_1); //outputs 1;
console.log(something_2); //outputs 2;
console.log(something_3); //outputs 3;
console.log(something_4); //outputs 4;
Note: using an array will be faster!
is it possible to add i to a var inside a for-loop?
in wrong syntax it would look like the code below
for(i=1; i<=countProjects; i++){
var test + i = $(otherVar).something();
};
Thanks!
It would be best to use an array for this:
var test = [];
for (i = 1; i <= countProjects; i++) {
test[i] = $(otherVar).something();
};
Then you could access the values like this:
console.log(test[1]);
console.log(test[2]);
etc...
If you have really good reason to have named variables for each value, you can create them like this:
for (i = 1; i <= countProjects; i++) {
window["test" + i] = $(otherVar).something();
};
console.log(test1);
As Mat stated, you should be using arrays for this type of functionality:
var projects = [];
for (var i = 0; i <= countProjects; i++) {
projects.push($(otherVar).something());
}
You could craft variable names, using object["varname"] syntax. But it's _generally_ bad practice:
var varName;
for (var i = 0; i <= countProjects; i++) {
varName = "test" + i.toString();
this[varName] = $(otherVar).something();
}
console.log(test1);