dynamic variables

J

J.P.

Hi,

I need to create a variable out of nothing. From a database I extract an
item with a certain id. With this id I want to create a new variable.
For example:

id = 36;

"item"+id = new Array();

Now I get the message "Illegal left hand assignment".

I tried:

eval("item"+id) = new Array();

Is it possible to create a variable out of nothing?
 
L

Lee

J.P. said:
Hi,

I need to create a variable out of nothing. From a database I extract an
item with a certain id. With this id I want to create a new variable.
For example:

id = 36;

"item"+id = new Array();

Now I get the message "Illegal left hand assignment".

I tried:

eval("item"+id) = new Array();

Is it possible to create a variable out of nothing?

var dynamic = new Object();
dynamic["item"+id] = new Array();
dynamic["item"+id][0] = "somevalue";
 
M

Michael Winter

I need to create a variable out of nothing. From a database I extract an
item with a certain id. With this id I want to create a new variable.
For example:

id = 36;

"item"+id = new Array();

[snip]

There are two options that immediately spring to mind. They're basically
the same, but I prefer the latter.

1) Create these variables on the global object:

/* In global scope: */
var global = this;

/* ... */

/* In any scope: */
global['item' + id] = []; /* Create new array */

which can also be written:

window['item' + id] = [];

2) Create an object that will do the same thing as the global
object, above:

var items = {}; /* Create an object, items
* {} is an object literal,
* equivalent to new Object()
*/

/* ... */

items[id] = []; // Create new array


The notation, identifier[...], has nothing to do with arrays in this
situation. Square bracket notation, as it is known, is effectively the
same as regular dot notation used to access object members, except that
it allows the use of expressions to compose the property name. See the
relevant FAQ notes article[1] for more information.

Hope that helps,
Mike


[1] <URL:http://www.jibbering.com/faq/faq_notes/square_brackets.html>
 
J

J.P.

Michael Winter schreef:
2) Create an object that will do the same thing as the global
object, above:

var items = {}; /* Create an object, items
* {} is an object literal,
* equivalent to new Object()
*/

/* ... */

items[id] = []; // Create new array


The notation, identifier[...], has nothing to do with arrays in this
situation. Square bracket notation, as it is known, is effectively the
same as regular dot notation used to access object members, except that
it allows the use of expressions to compose the property name. See the
relevant FAQ notes article[1] for more information.

Hope that helps,
Mike


[1] <URL:http://www.jibbering.com/faq/faq_notes/square_brackets.html>

Yes, that really helps. Thanks a lot!! My code is readable again!
 
R

RobG

J.P. said:
Michael Winter schreef:
2) Create an object that will do the same thing as the global
object, above:

var items = {}; /* Create an object, items
* {} is an object literal,
* equivalent to new Object()
*/

/* ... */

items[id] = []; // Create new array


The notation, identifier[...], has nothing to do with arrays in this
situation. Square bracket notation, as it is known, is effectively the
same as regular dot notation used to access object members, except
that it allows the use of expressions to compose the property name.
See the relevant FAQ notes article[1] for more information.

Hope that helps,
Mike


[1] <URL:http://www.jibbering.com/faq/faq_notes/square_brackets.html>

Yes, that really helps. Thanks a lot!! My code is readable again!

To pre-empt your next question "How do I see what's in the object?"

Here's how:

var item = {}
item[0] = 'foo';
item[1] = ['bar','buzz'];

var msg='Properties of object item:\n';
for ( prop in item) {
msg += '\n' + prop + ' has value ' + item[prop];
}

alert(msg);

Another interesting feature is that you can add methods to your
object. So you could add a method that shows what's in the object:

item.showContent = function() {
var msg=[];
for ( prop in item) {
if ( 'function' != typeof item[prop]) {
msg.push(prop + ' : ' + item[prop]);
}
}
alert(msg.join('\n'));
}

The 'typeof' test stops the method being printed out, comment it out
to see everything. To see what's in the object, call the method:

item.showContent();
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,731
Messages
2,569,432
Members
44,832
Latest member
GlennSmall

Latest Threads

Top