Martin: Feldnamen assoziativer Arrays

Mahlzeit!

Tut mir leid, wenn ich heute mit einer scheinbar trivialen Frage ankomme. Ich weiß, das Archiv hätte mir bestimmt auch helfen können, wenn es denn erreichbar wäre. Aber leider darf ich schon den ganzen Morgen lesen "Der Server ist ausgelastet".

Nun ja. Meine Frage war eigentlich, wie ich bei einem Javascript-Array oder Objekt die Namen (nicht die Werte) der einzelnen Felder abfragen kann. Ein Beispiel:

var a = new Array();
 a[einstieg]   = 42;
 a[feierabend] = "nvl";
 a[eisbecher]  = 100;

Ich suche jetzt nach einem JS-Ausdruck, der mir die gewählten Namen der Felder (also einstieg, feierabend, eisbecher) verrät.
Ich bin sicher, das habe ich schon  mal irgendwo gelesen, aber ich kann mich nicht mehr konkret erinnern.

Danke für die Gedächtnishilfe!

Martin

--
Zwischen Leber und Milz
passt immer noch'n Pils.
  1. var a = new Array();
    a[einstieg]   = 42;
    a[feierabend] = "nvl";
    a[eisbecher]  = 100;

    Das ist keine Array. es gibt auch keine assoziativen Arrays in Javascript. Da ist ein Object mit den Eigenschaften einstieg, feieraben usw.

    Also so:

    var a = new Object();
    a.einstieg   = 42;
    a.feierabend = "nvl";
    a.eisbecher  = 100;

    Ich suche jetzt nach einem JS-Ausdruck, der mir die gewählten Namen der Felder (also einstieg, feierabend, eisbecher) verrät.

    for(var x in a)

    Struppi.

  2. Ich glaube, mein Beispiel war syntaktisch nicht ganz korrekt. Besser:

    var a = new Array();
     a["einstieg"]   = 42;
     a["feierabend"] = "nvl";
     a["eisbecher"]  = 100;

    Dürfte gleichbedeutend sein mit

    a.einstieg   = 42;
    a.feierabend = "nvl";
    a.eisbecher  = 100;

    Ja, ich glaube das wär's.

    Martin

    1. Ich glaube, mein Beispiel war syntaktisch nicht ganz korrekt. Besser:

      var a = new Array();

      Nein, es ist kein Array!

      Ein Array hat die Eigenschaft length, doch die bleibt immer bei null. Auch kannst du ein Array mit der Funktion sort() sortieren dieses Konstrukt nicht, denn es ist keine Array.
      Sondern ein Object()

      a["einstieg"]   = 42;
       a["feierabend"] = "nvl";
       a["eisbecher"]  = 100;

      Dürfte gleichbedeutend sein mit

      a.einstieg   = 42;
      a.feierabend = "nvl";
      a.eisbecher  = 100;

      Genau.

      Struppi.

  3. Hallo Martin.

    Nun ja. Meine Frage war eigentlich, wie ich bei einem Javascript-Array oder Objekt die Namen (nicht die Werte) der einzelnen Felder abfragen kann. Ein Beispiel:

    Ganz einfach:
    var wert = objekt.eigenschaft;

    var a = new Array();
     a[einstieg]   = 42;
     a[feierabend] = "nvl";
     a[eisbecher]  = 100;

    Hm, du meinst sicher eher sowas:

    a {
        einstieg : 42,
        feierabend : 'nvl',
        eisbecher : 100
      }

    Das erzeugt ein einfaches Objekt mit den Eigenschaften einstieg, feierabend und eisbecher mit den dazu gehörenden Werten. Etwas komfortabler könnte es so aussehen:

    function NeuesObjekt(var1, var2, var3) {
      this.einstieg = var1;
      this.feierabend = var2;
      this.eisbecher = var3;
    }

    a = new NeuesObjekt(42,'nvl',100);

    Dann hat Objekt a die gewünschten Eigenschaften mit den dazu gehörenden Werten. Hoffe, dein Anliegen richtig verstanden zu haben.

    Freundschaft!
    Siechfred

    1. Hallo Siechfried,

      auch wenn ich meine Frage bzw. mein Beispiel etwas konfus formuliert habe, hast du es scheinbar richtig verstanden. "Richtig" heißt hier: So wie ich es eigentlich meinte.

      Hm, du meinst sicher eher sowas:

      a {
          einstieg : 42,
          feierabend : 'nvl',
          eisbecher : 100
        }

      function NeuesObjekt(var1, var2, var3) {
        this.einstieg = var1;
        this.feierabend = var2;
        this.eisbecher = var3;
      }

      a = new NeuesObjekt(42,'nvl',100);

      Dann hat Objekt a die gewünschten Eigenschaften mit den dazu gehörenden Werten. Hoffe, dein Anliegen richtig verstanden zu haben.

      Einige Fachleute vertreten die Ansicht, dass diese drei Beispiele letztendlich nur drei verschiedene Notationen sind, die intern zum gleichen Ergebnis führen, und dass die Unterscheidung von Array und Objekt in JS reiner Formalismus ist. Dieser Auffassung schließe ich mich an. Jedes JS-Array kann ich auch als Objekt auffassen und umgekehrt.

      Aber mit meinem ursprünglichen Anliegen hat mir der Denkanstoß von Struppi schon entscheidend geholfen.

      Freundschaft!

      Danke, aber gern! *Prost!*

      Martin

      1. Einige Fachleute vertreten die Ansicht, dass diese drei Beispiele letztendlich nur drei verschiedene Notationen sind, die intern zum gleichen Ergebnis führen, und dass die Unterscheidung von Array und Objekt in JS reiner Formalismus ist. Dieser Auffassung schließe ich mich an. Jedes JS-Array kann ich auch als Objekt auffassen und umgekehrt.

        Das ist falsch.

        a = new Array('e1', 'e2', 'e3');

        alert(a.length);  // ergibt: 3

        a['e1'] = "";
        a['e2'] = "";
        a['e3']= "";

        alert(a.length); // immer noch 3

        o = new Object();
        o['e1'] = "";
        o['e2'] = "";
        o['e3']= "";

        alert(o.length); // undefined

        Ein Array ist ein Object (wie fast alles in JS), aber du willst kein Array sondern ein Object mit den von dir gewünschten Eigenschaften

        Du könntest genauso gut schreiben:

        var a = new Image();
        o['e1'] = "";
        o['e2'] = "";
        o['e3']= "";

        Es geht lediglich darum, das du ein Object erzeugst (Array) das du gar nicht brauchst.

        Struppi.

      2. Hallo Martin.

        Einige Fachleute vertreten die Ansicht, dass diese drei Beispiele letztendlich nur drei verschiedene Notationen sind, die intern zum gleichen Ergebnis führen, und dass die Unterscheidung von Array und Objekt in JS reiner Formalismus ist. Dieser Auffassung schließe ich mich an. Jedes JS-Array kann ich auch als Objekt auffassen und umgekehrt.

        Ich als Nichtfachmann würde es so formulieren, dass ein Array ein Objekt ist, aber ein Objekt kein Array. Eine Begründung hat dir Struppi ja schon geliefert. Ein Array dient dazu, Daten zu speichern, auf die du bei Bedarf zugreifen kannst (also so eine Art Eigenschaften, nur banaler ;-) ). Ein Objekt hingegen als reinen manipulierbaren Datenspeicher zu sehen, ist nach meiner Meinung zu wenig, da es bei einem Objekt darum geht, etwas speichern zu können (Eigenschaften), aber auch, diese Eigenschaften oder auch die Eigenschaften anderer Objekte zu manipulieren (Methoden).

        Nehmen wir mal das Beispiel Buch. Angenommen, Buch wäre ein Array. Dann könntest du über Buch[0..n] auf die Seiten des Buches zugreifen. Möchtest du das Buch an einer bestimmten Stelle aufschlagen, geht das nicht, ein Array kann sich nicht aufschlagen. Du musst also die Hände nehmen. Wäre Buch ein Objekt, könnte es die verschiedensten Eigenschaften haben, z.B. Seitenzahl, Anzahl der Kapitel und natürlich den Inhalt. Darüber hinaus hätte es Methoden, z.B. Aufschlagen oder vielleicht Blättern oder sowas, sodass du zum Aufschlagen oder Blättern deine Hände nicht bräuchtest ;-)

        Ich habe das jetzt so hingeschrieben, wie ich mir OOP mal selber versucht habe zu erklären und hoffe, dass es so verständlich und einigermaßen richtig ist :-)

        Freundschaft!
        Siechfred