T-Rex: Object - Array

Schönen Tag :),

hoffe bei euch scheint auch so schön die Sonne :).
Naja hab eigentlich nur eine kleine Frage.

Wollte wissen ob es Möglich ist eine Instanz in einem Array ab zu speichern.
ungefähr so

var arArray = new Array();
arArray["object1"] = new Object();
arArray["object2"] = new Object();

und so weiter....
meine Tests bis jetzt waren erfolglos :(. Aber vielleicht kennt von euch ja jemand einen Trick :).

Grüße aus dem sonnigen Franken
T-Rex

  1. Schönen Tag :),

    hoffe bei euch scheint auch so schön die Sonne :).
    Naja hab eigentlich nur eine kleine Frage.

    Wollte wissen ob es Möglich ist eine Instanz in einem Array ab zu speichern.
    ungefähr so

    var arArray = new Array();
    arArray["object1"] = new Object();
    arArray["object2"] = new Object();

    und so weiter....
    meine Tests bis jetzt waren erfolglos :(. Aber vielleicht kennt von euch ja jemand einen Trick :).

    Grüße aus dem sonnigen Franken
    T-Rex

    Hmm...vielleicht muss man dazu noch was ergänzen *grins*

    Das Array ist selbst in einem Object.
    Also ergibt sich folgende Struktur:

    function Object2()
    {

    }

    function Object1()
    {
     this.arArray = new Array();
     this.arArray["object1"] = new Object2();
     this.arArray["object2"] = new Object2();
    }

    Eventuell ist das wichtig?!

    die Grüße bleiben die gleichen ;)
    T-Rex

  2. Wollte wissen ob es Möglich ist eine Instanz in einem Array ab zu speichern.

    Ja.

    var arArray = new Array();
    arArray["object1"] = new Object();
    arArray["object2"] = new Object();

    Das ist kein Array, bzw. du kannst hier genauso gut ein Object verwenden.
    Mehr zum Thema: http://aktuell.de.selfhtml.org/artikel/javascript/organisation/

    Struppi.

    1. Wollte wissen ob es Möglich ist eine Instanz in einem Array ab zu speichern.

      Ja.

      var arArray = new Array();
      arArray["object1"] = new Object();
      arArray["object2"] = new Object();

      Das ist kein Array, bzw. du kannst hier genauso gut ein Object verwenden.
      Mehr zum Thema: http://aktuell.de.selfhtml.org/artikel/javascript/organisation/

      Struppi.

      Versteh ich nicht...
      Ich möchte doch nur die Instanzen der Objekte (Anzahl n,sprich können unendlich viele werden) in einem Array speichern.

      Geht das überhaupt?

      Gruß und so
      T-Rex

      1. Versteh ich nicht...

        was verstehst du nicht?

        Ich möchte doch nur die Instanzen der Objekte (Anzahl n,sprich können unendlich viele werden) in einem Array speichern.

        Geht das überhaupt?

        Ja, klar geht das.

        Struppi.

  3. var arArray = new Array();
    arArray["object1"] = new Object();
    arArray["object2"] = new Object();

    Statt Array Object!

    var arArray = new Object();
    arArray["object1"] = "obj1";
    arArray["object2"] = "obj2";

    1. var arArray = new Array();
      arArray["object1"] = new Object();
      arArray["object2"] = new Object();

      Statt Array Object!

      var arArray = new Object();
      arArray["object1"] = "obj1";
      arArray["object2"] = "obj2";

      ???

      Ich glaub ihr versteht mich nicht oder ich bin zu doof dafür.
      Ich möchte x Objekte instanzieren und die Instanzen in einem Array sammeln.

      var arArray <--- das soll das Array sein.
      arArray["object1"] = new Object() <--- eine Instanz von einem Objekt erstellt und im Array "abgeladen"

      arArray["object2"] = new Object() <--- zweite Instanz von einem Objekt erstellt und im Array "abgeladen"

      das ganze würde ich dann in eine Schleife packen und so oft durchlaufen wie ich es eben brauche und dass kann unterschiedlich sein. Um genau zu sein würde es dann heißen arArray["object"+counter] = new Object();

      1. var arArray = new Array();
        arArray[1] = new Object();
        arArray[2] = new Object();

      2. Hallo,

        Ich möchte x Objekte instanzieren und die Instanzen in einem Array sammeln.

        Nein, möchtest du nicht. Arrays in JavaScript sind immer numerische Arrays. Was du anscheinend willst, ist ein »Hash«, »Assoziativer Array« oder wie auch immer du es nennen willst. Dazu bietet dir ein JavaScript-Array nichts. Du kannst und solltest dasselbe mit einem generischen Object lösen. Deshalb weisen dich hier alle auf new Object() statt new Array() hin.

        Siehe auch http://de.selfhtml.org/javascript/objekte/array.htm#assoziative_arrays.

        var arArray <--- das soll das Array sein.

        var hash = new Object();

        oder in der Kurzschreibweise:

        var hash = {};

        das ganze würde ich dann in eine Schleife packen und so oft durchlaufen wie ich es eben brauche und dass kann unterschiedlich sein. Um genau zu sein würde es dann heißen arArray["object"+counter] = new Object();

        Du solltest einen Konstruktor nicht Object nennen. Aber nehmen wir mal an, das war nur ein Beispiel und er hieße »K«. Ja, dann sollte das gehen:

        hash["object" + counter] = new K();

        Und ja, das geht auch in einer Schleife:

        for (var i = 0; i < 10; i++) {
           hash["object" + i] = new K();
        }

        Aber wieso verwendest du dafür keinen stinknormalen Array und schreibst:

        var arr = [];
        for (var i = 0; i < 10; i++) {
           arr.push( new K() );
        }

        arr[5] ist doch sinniger als hash["object5"].

        Mathias

        1. Hallo,

          Ich möchte x Objekte instanzieren und die Instanzen in einem Array sammeln.

          Nein, möchtest du nicht. Arrays in JavaScript sind immer numerische Arrays. Was du anscheinend willst, ist ein »Hash«, »Assoziativer Array« oder wie auch immer du es nennen willst. Dazu bietet dir ein JavaScript-Array nichts. Du kannst und solltest dasselbe mit einem generischen Object lösen. Deshalb weisen dich hier alle auf new Object() statt new Array() hin.

          Siehe auch http://de.selfhtml.org/javascript/objekte/array.htm#assoziative_arrays.

          var arArray <--- das soll das Array sein.

          var hash = new Object();

          oder in der Kurzschreibweise:

          var hash = {};

          das ganze würde ich dann in eine Schleife packen und so oft durchlaufen wie ich es eben brauche und dass kann unterschiedlich sein. Um genau zu sein würde es dann heißen arArray["object"+counter] = new Object();

          Du solltest einen Konstruktor nicht Object nennen. Aber nehmen wir mal an, das war nur ein Beispiel und er hieße »K«. Ja, dann sollte das gehen:

          hash["object" + counter] = new K();

          Und ja, das geht auch in einer Schleife:

          for (var i = 0; i < 10; i++) {
             hash["object" + i] = new K();
          }

          Aber wieso verwendest du dafür keinen stinknormalen Array und schreibst:

          var arr = [];
          for (var i = 0; i < 10; i++) {
             arr.push( new K() );
          }

          arr[5] ist doch sinniger als hash["object5"].

          Mathias

          :) danke für deine ausführliche Erklärung.
          push kann ich nicht verwenden, da ich ja noch drauf zugreifen will. Dann hab ich zwar einen Stack geschaffen, weiß aber nicht mehr wo die Instanz liegt, mit der ich z.B. einen Audi gebaut hab. Deshalb muss der Audi im (assoziativen) ARRAY (:P) arArray["Audi"] liegen, damit ich später wieder drauf zugreifen kann. z.B. So... arArray["Audi"].fahren();

          Funktioniert auch super, bloß hab ich jetzt ein neues Problem und ich hab keinen Ansatz das zu lösen :(. Ich mach dafür mal einen neuen Topic auf.

          Danke soweit!!
          MFG
          T-Rex

          PS. (grummel woher soll man auch wissen das man in JS für assoziative Array ein Object nehmen soll....grummel....).

          1. [latex]Mae  govannen![/latex]

            :) danke für deine ausführliche Erklärung.
            push kann ich nicht verwenden, da ich ja noch drauf zugreifen will. Dann hab ich zwar einen Stack geschaffen, weiß aber nicht mehr wo die Instanz liegt, mit der ich z.B. einen Audi gebaut hab. Deshalb muss der Audi im (assoziativen) ARRAY (:P) arArray["Audi"] liegen, damit ich später wieder drauf zugreifen kann. z.B. So... arArray["Audi"].fahren();

            var arArray = {};  
            arArray.Audi = {}; // new Object  
            arArray.BMW = {};  
              
            arArray.Audi.fahren();
            

            Jeder Indentifizierer darf auch hier natürlich nur ein Mal vorkommen.

            Funktioniert auch super, bloß hab ich jetzt ein neues Problem und ich hab keinen Ansatz das zu lösen :(. Ich mach dafür mal einen neuen Topic auf.

            <wahrsager>Der wird dir höchstwahrscheinlich eh wieder geschlossen, wenn das Thema nicht *völlig* unabhängig von diesem hier ist, daher kannst du auch gleich hier bleiben</wahrsager>

            Cü,

            Kai

            --
            Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
            selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
          2. Hallo,

            Funktioniert auch super, bloß hab ich jetzt ein neues Problem und ich hab keinen Ansatz das zu lösen :(. Ich mach dafür mal einen neuen Topic auf.

            Bitte nicht. Ich antworte dir hier:

            function Objekt2()
            {
               ...
            }

            function Objekt1()
            {
               this.arArray = new Object();
               this.arArray['text1'] = new Objekt2();
               this.arArray['text2'] = new Objekt2();
            }

            var Instanz1 = new Object1() <--- arArray ist belegt und man kann damit arbeiten

            var Instanz2 = new Object1() <--- arArray ist belegt und man kann damit arbeiten, doch das arArray der ersten Instanz ist gelöscht.

            Da musst du dich täuschen, das kann nämlich nicht sein. Alleine dadurch, dass du eine zweite Instanz mit dem Objekt2-Konstruktor anlegst, wird doch nichts bei der ersten Instanz gelöscht?!

            Beispiel / Beweis:

            function K1 () {  
             if (!K1.counter) K1.counter = 0;  
             this.number = ++K1.counter;  
            }  
              
            function K2 () {  
             this.hash = {};  
             this.hash.eins = new K1();  
             this.hash.zwei = new K1();  
            }  
              
            var i1 = new K2();  
            var i2 = new K2();  
              
            alert(i1.hash.eins.number + " " + i1.hash.zwei.number);  
            alert(i2.hash.eins.number + " " + i2.hash.zwei.number);
            

            Funktioniert problemlos wie erwartet.

            PS. (grummel woher soll man auch wissen das man in JS für assoziative Array ein Object nehmen soll....grummel....).

            Na, es steht nicht umsonst in der SELFHTML-Doku.

            Mathias