dynamic variables

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • J.P.

    dynamic variables

    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?

    ---

    J.P.
  • Michael Winter

    #2
    Re: dynamic variables

    On 06/05/2005 21:05, J.P. wrote:
    [color=blue]
    > 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();[/color]

    [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.c om/faq/faq_notes/square_brackets .html>

    --
    Michael Winter
    Replace ".invalid" with ".uk" to reply by e-mail.

    Comment

    • Lee

      #3
      Re: dynamic variables

      J.P. said:[color=blue]
      >
      >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?[/color]

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

      Comment

      • J.P.

        #4
        Re: dynamic variables

        Michael Winter schreef:
        <remove>
        [color=blue]
        > 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.c om/faq/faq_notes/square_brackets .html>
        >[/color]

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

        --

        J.P.

        Comment

        • RobG

          #5
          Re: dynamic variables

          J.P. wrote:[color=blue]
          > Michael Winter schreef:
          > <remove>
          >[color=green]
          >> 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.c om/faq/faq_notes/square_brackets .html>
          >>[/color]
          >
          > Yes, that really helps. Thanks a lot!! My code is readable again!
          >[/color]

          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.showConten t = 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.showConten t();

          --
          Rob

          Comment

          Working...