Javascript: give a variable a name made of 2 variables - javascript

I want to create a new variable in javascript but it's name should made of a stale part and a variable one like this:
tab_counter = 1;
var editor + tab_counter = blabla
well i want the new variable name to be in this case editor1, is this possible?

You cannot create a stand-alone variable name that way (except as a global) (edit or except with eval()), but you can create an object property:
var tab_counter = 1;
var someObject = {};
someObject['editor' + tab_counter] = "bla bla";
You can create globals as "window" properties like that, but you probably shouldn't because global variables make kittens cry.
(Now, if you're really just indexing by an increasing counter, you might consider just using an array.)
edit also see #Birey's somewhat disturbing but completely correct observation that you can use "eval()" to do what you want.

It is possible
var tab_counter=1;
eval("var editor"+tab_counter+"='blah'")
alert(editor1);
eval("var editor"+tab_counter+1+";")
editor2='blahblah';
alert(editor2);
http://jsfiddle.net/5ZLYe/

You can do the eval method used by Birey or you can create a custom property of an object such as...
obj[editor + tab_counter] = blabla;
But it sounds like you're going about doing whatever you're doing in a particularly horrible way. If you just want to store multiple items which you can index into use an array...
var array = [];
array[0] = blabla;
array[1] = blabla2;
alert(array[0]); //shows value of blabla
alert(array[1]); //shows value of blabla2

It seems like you may want to consider using a Dictionary for something like this. This link which references this link describes your options there.

Related

How to make a variable which consists of multiple 'divs'

I have a question regarding variables in Javascript.
When I assign a var to a ID I do it like this:
var x = document.getElementById("div_name");
But I would like to make a variable which consists of multiple 'divs'.
I thought this might work but I does not:
var x = document.getElementById("div_name"),document.getElementById("div_name2");
Can someone please help me find the right code syntax and explain why the syntax I tried is incorrect.
So, If you just want them as a list of div's you could do this:
var x = [document.getElementById("div_name"),document.getElementById("div_name2")];
Just wrap them up with [].
If your var should contain more than one object (div in your case), then you need to have more variable or, better, an array.
You can create yor array by using following code.
var x = [document.getElementById("div_name"), document.getElementById("div_name2")];
This is due to the fact that different DIVs in the DOM page are different objects...
There is no such variable that is defined as:
var x = somthing, somesthingElse
You need to chose a variable that can store a collection of "things". In your case the Array is an ideal choice:
var x = [document.getElementById("div_name"),document.getElementById("div_name2")];
The brackets at the beginning and end of the expression are the syntax to declare a variable.
In addition to using Array, you can also store your divs in an Object
var divs = {
div1: document.getElementById("div_name"),
div2: document.getElementById("div_name2")
};
Thus, you could give a convenient name to your divs, but still pass them around as you please:
divs.div1;
divs.div2;
Or loop through them like so:
for (div in divs) {
console.log(divs[div]);
};

How can I get the content of a variable that I don't know its name

Although this question is about datatables, it's not specifically about it.
I have datatables init stored in variables. The variable name varies as I have several datatables on the page. I am trying to collect the content of those variable by assembling the variable's name and I don't know how i can later use the 'string' I've assembled as a variable
For example:
var var_1_id_0 = $('.item1').datatable();
var var_1_id_1 = $('.item2').datatable();
var var_1_id_2 = $('.item3').datatable();
// later in the code.
var varname = 'var_1_id'+'_0';
// varname now holds the string 'var_1_id_0' which is the first variable.
My question is how can I use varname's string 'var_1_id_0' as the variable 'var_1_id_0'?
I hope that make sense.
Thanks
It is not possible. The closer solution is this one:
var datatable={};//A new Object.Arrays doesn't work property for this.
datatable['var_1_id_0'] = $('.item1').datatable();
datatable['var_1_id_1'] = $('.item2').datatable();
datatable['var_1_id_2'] = $('.item3').datatable();
// later in the code.
var varname = 'var_1_id'+'_0';
console.log(datatable[varname]);
Try it like this:
var varname = 'var_1_id'+'_0';
alert(window[varname]);

access of an array inside another array in javascript

i have two arrays defined like these
var theory= new Array();
var first;
var second;
function arrTheory () {
this.first= first;
this.second= second;
}
var subject= new Array();
...
function arrSubject () {
...
this.theory= theory;
...
}
how can i access to the elements in the theory array inside the bigger one?
I've tried
subject[0].theory.first;
but it doesn't work while
subject[0].name;
which is another field of the big array works fine. what i've missed?
I think the point is, you have an array with element as "obj" and added to another array.
So to access to a you could try
subject[0].theory[0].first;
I mean access to element of array by index and them access to the element of the object.
Ok, I have a good guess given the information you've provided.
theory in subject[0].theory is an array, right? How come you are using it like subject[0].theory.first? You should use an indexer like subject[0].theory[0].
In the code you showed us (before any potential edits), you don't add anything to the var theory= new Array();
Also beware to make sure that this is what you really expect. In JavaScript, the context of this changes depending on context of the caller and that's confusing sometimes.
subject[0].theory[0].first;
try that.
Using this in arrTheory() and arrSubject() will cause a syntax error because they are functions not objects and you need rather to set those properties to theory and subject arrays instead so you must use the correspondent array name instead of this like following:
var theory= new Array();
var first = "first";
var second = "second";
function arrTheory () {
theory.first= first;
theory.second= second;
}
var subject= new Array();
function arrSubject () {
subject.theory= theory;
}
arrTheory();
arrSubject();
alert(subject.theory.first + " / " + subject.theory.second);
then you can access first and second properties like this:
subject.theory.first
subject.theory.second
in the code above property name is not set in subject, if it's already set in the original code you can call it like this:
subject.name
jsfiddle

Javascript Computed Values With Arrays

Jquery Each Json Values Issue
This question is similar to above, but not the same before it gets marked duplicated.
After realasing how to use computed values i came across another issue.
In my javascript i have the following code:
var incidentWizard = ['page1.html','page2.html','page3.html'];
var magicWizard = ['page1.html','page2.html','page3.html'];
var loadedURL = 'page1.html';
The input to this function would be (true,'incident')
function(next,wizardname)
{
var WizSize = incidentWizard.length;
wizardName = [wizardName] + 'Wizard';
var wizardPOS = jQuery.inArray(loadedURL,incidentWizard);
And now i want to use the wizardname parameter to decide what array i am going to use...
Loader(incidentWizard[wizardPOS],true);
Ive also tried
Loader([incidentWizard][wizardPOS],true);
and
Loader([incidentWizard][wizardPOS],true);
Also the loader function just required the string value in the array at wizardPOS sorry for confusion
But when trying this i always end up with the outcome...
/incidentWizard
I know this is something to do with using computed values but i've tried reading about them and cant seem to solve this issue.
Basicly i want to use the computed value of wizardName to access an an array of that name.
Please help supports, looking forward to seeing many ways to do this!
On this line:
wizardName = [wizardName] + 'Wizard';
You are attempting to concatenate the string 'Wizard' to an Array with one string element "incident". I'm assuming you just want regular string concatenation:
wizardName = wizardName + 'Wizard';
However, now you only have a string, not an array instance. To fix that, change the way you define your *Wizard arrays to something like:
var wizardyThings = {
incidentWizard : ['page1.html','page2.html','page3.html'],
magicWizard: ['page1.html','page2.html','page3.html']
};
Then your function (which is missing a name as it stands), becomes:
function someMethod(next, wizardname) {
wizardName = wizardName + 'Wizard';
var wizSize = wizardyThings[wizardName].length;
var wizardPOS = jQuery.inArray(loadedURL, wizardyThings[wizardName]);
...
}
You can only access properties of objects that way. For global values, window[ name ] will work. For simple local variables it's just not possible at all. That is, if inside a function you've got
var something;
then there's no way to get at that variable if all you have is the string "something".
I would just put each array as a prop on an object:
var obj {
incidentWizard: ['page1.html','page2.html','page3.html'],
magicWizard: ['page1.html','page2.html','page3.html']
};
Then you can just do obj['incidentWizard'] or obj.incidentWizard this will return:
['page1.html','page2.html','page3.html']

Help needed with Javascript Objects

I need some help with Javascript objects. This is what I've got:
_genre_id = {politics:'1',sport:'2',celeb:'3',gossip:'4',busi:'5'};
var genre = 'politics';
What I want to accomplish would be to simply get the value stored for politics, in this case 1 by doing something like this:
var genreID = _genre_id.genre;
But this of course doesn't work because the genre property doesn't exist. I want it to relate to _genre_id.politics.
Any ideas would be welcome.
How about _genre_id[genre]?
var _genre_id = {politics:'1',sport:'2',celeb:'3',gossip:'4',busi:'5'};
var genre = 'politics';
var genreID = _genre_id[genre];
Note that I added var before setting _genre_id, so that it gets declared in the current scope, without declaring it, you end up setting window._genre_id instead of a local variable.

Categories

Resources