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);
Related
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"
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.
I have a set of variables:
var var1 = 0;
var var2 = 0;
var var3 = 0;
var var4 = 0;
var var5 = 0;
And I want to check them all with a for Loop, but I'm not quite sure of the syntax:
for( var i = 1; i<6; i++){
alert(var[i]);
}
that for loop yields no results.
Put them in an array instead.
var vars = [0, 0, 0, 0, 0, 0];
for(var i = 0; i < vars.length; i++) {
alert(vars[i]);
}
If you're defining the varables in the global scope, you can access the values using window['var'+i]:
for(var i = 1; i<6; i++){
alert(window['var'+i]);
}
To access them you would have to use the scope to which they were written. If your code is in the window scope that would then become:
for( var i = 1; i<6; i++){
alert(window['var'+i]);
}
Though of course it's far cleaner if it's in a different scope specific to whatever you're doing. In those cases often
for( var i = 1; i<6; i++){
alert(this['var'+i]);
}
would work.
The data construct you are using is not good for this. Using an array or object is much more feasible for what you want to do as well as being easily extendable.
var arr = [0,0,0,0,0,0];
for (var i = 0; i < arr.length; i++) {
alert(arr[i]);
}
var[i] is used it var is an array. But in your case it isn't. The best way would be to place those values in an array, like;
var myvar = [0,0,0,0,0];
then use the for loop to check for the value.
for( var i = 1;i<6; i++){
alert(myvar[i-1]);
}
Is there a more concise (i.e. one line) way to do this in Javascript?:
//Media object hasn't been declared yet
var mediaObject.tags = [];
for(var i = 0; i < 100; i++) {
mediaObject.tags.push(entries[i]);
}
EDIT: Here is how my full function looks
var mediaObject = new CustomMedia();
mediaObject.text = entries[k]['text'];
mediaObject.tags = [];
for(var i = entries[k]['tags'].length - 1; i >= 0; i--) {
mediaObject.tags.push(entries[k]['tags'][i]['value']);
}
The last part is what I want to make into one line. Declaring the mediaObject.tags and pushing the content.
Try this:
var mediaObject.tags = entries.slice(0, 100);
If I understand correctly, what you need is Array.map():
mediaObject.tags = entries[k].tags.map(function (t) { return t.value; });
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);