BerndK: Alle Schlüssel eines Arrays auslesen

Hi,

ich hab folgendes Problem:

Ich hab ein 3dim-JS-Array average. Die ersten beiden Schlüssel sind gegeben, ich hab also average[0123]['test']. Nun möchte ich alle Schlüssel in der 3ten dimension von average[0123]['test'] ausgeben lassen. Wie kann ich das machen?

Vielen Dank
Bernd

  1. Hi,

    du lässt dir mit average[0123]['test'].length die länge des Arrays in 'ne Variable ausgeben und schreibst dann 'ne for-schleife in der du von 0 < arraylänge dir alle werte ausgeben lässt:

    var arraylänge = average[0123]['test'].length;

    for(i = 0; i<arraylänge; i++)
    {
     alert(average[0123]['test'][i]);
    }

    mfg, m@y

    1. Hallo Bernd, hallo m@y

      du lässt dir mit average[0123]['test'].length die länge des Arrays in 'ne Variable ausgeben und schreibst dann 'ne for-schleife in der du von 0 < arraylänge dir alle werte ausgeben lässt:

      m@y,

      das geht natürlich nur bei indizierte Arrays. Sobald ein Element der Form average[0123]['test']['test1'] auftritt, funktioniert deine Lösung nicht mehr.

      Bernd,

      was du suchst ist die for-in-Schleife. Siehe auch: http://selfhtml.teamone.de/javascript/sprache/schleifen.htm#for

      Viele Grüße

      Antje

      1. Danke Antje, danke m@y,

        die for-in-Schleife sieht nicht schlecht aus, leider bringt die nur mein letztes Element.

        Hier ein Auszug aus meinem Array-Aufbau:

        average[06008120] = new Array();
        average[06008120]['temp1'] = new Array();
        average[06008120]['temp2'] = new Array();
        average[06008120]['temp1']['test1']='-';
        average[06008120]['temp2']['test1']='0';
        average[06008120]['temp1']['test2']='1sec';
        average[06008120]['temp2']['test2']='1sec';
        average[06008120]['temp1']['test3']='81.65';
        average[06008120]['temp1']['test4']='96.28';
        average[06008120]['temp1']['test5']='122.78';
        average[06008120]['temp2']['test3']='81.65';
        average[06008120]['temp2']['test4']='96.28';
        average[06008120]['temp2']['test5']='122.78';
        average[06008120]['temp1']['test6']='0';
        average[06008120]['temp2']['test6']='0';

        average[06008120]['temp1'] ist bekannt, also sollte er mir in der for-in-Schleife

        test1
        test2
        test3
        test4
        test5
        test6

        ausgeben.

        Aufbau der for-Schleife:
        for(var val in average[06008120]['temp1'])
        {
          alert(val);
        }

        Leider erhalte ich nur test6. Was ist falsch? Der Aufbau des Arrays ist doch in Ordnung, oder?

        Vielen Dank

        1. Hallo Bernd,

          die for-in-Schleife sieht nicht schlecht aus, leider bringt die nur mein letztes Element.

          konnte ich nicht nachvollziehen. Alle Browser (NN4 nach einer kleinen Korrektur) durchliefen, alle Elemente in der Schleife.

          Unterschiede gab es nur bei Opera, der die Elemente in der Reihenfolge

          test2
          test1
          test6
          test5
          test4
          test3

          durchlief.

          average[06008120] = new Array();

          NN4 macht hier Probleme. Er interpretiert die Zahl 06008120 auf Grund der führenden Null als Oktalzahl und stört sich dann an der 8, da diese Ziffer keine gültige Oktalzahl ist.

          besser also: average['06008120'] verwenden oder die führende Null weglassen.

          for(var val in average[06008120]['temp1'])

          {
            alert(val);
          }

          Leider erhalte ich nur test6.

          könnte es sein, das nach

          for(var val in average[06008120]['temp1'])

          irgendwo ein ; rumgeistert? Dann wird das Alert nur für den letzten Wert ausgegeben.

          Sicherheitshalber hier meine Testdaten:

          average = new Array();
          average['06008120'] = new Array();
          average['06008120']['temp1'] = new Array();
          average['06008120']['temp2'] = new Array();
          average['06008120']['temp1']['test1']='-';
          average['06008120']['temp2']['test1']='0';
          average['06008120']['temp1']['test2']='1sec';
          average['06008120']['temp2']['test2']='1sec';
          average['06008120']['temp1']['test3']='81.65';
          average['06008120']['temp1']['test4']='96.28';
          average['06008120']['temp1']['test5']='122.78';
          average['06008120']['temp2']['test3']='81.65';
          average['06008120']['temp2']['test4']='96.28';
          average['06008120']['temp2']['test5']='122.78';
          average['06008120']['temp1']['test6']='0';
          average['06008120']['temp2']['test6']='0';

          for(var val in average['06008120']['temp1'])
          {
            document.writeln(val,"<br>");
          }

          Gruß

          Antje

          1. Danke antje,

            hab meinen Fehler gefunden.

            Ich sag nur: eval is evil ;)

            Gruss
            Bernd

  2. Ich hab ein 3dim-JS-Array average. Die ersten beiden Schlüssel sind gegeben, ich hab also average[0123]['test']. Nun möchte ich alle Schlüssel in der 3ten dimension von average[0123]['test'] ausgeben lassen. Wie kann ich das machen?

    Das ist kein Array!
    Das sind Objekte und die "Schlüssel" sind Attribute. Du hast also ein Objekt average mit dem Attribut '0123' (wobei man hier aufpassen muss, wenn du das wirklich als Array definierst, dan hat dein Array 123 leere Einträge, deshalb ist es sinnvoll Objekte als Objekte zu definieren) das wiederrum ein Objekt ist und die Eigenschaft 'test' hat. Deinieren solltest du das so:

    average = new Object();
    average['0123'] = new Object();

    .....

    Das macht in deinem Beispiel mehrfach Sinn. Einmal um das leere Array zu vermeiden und anderseits damit du nicht auf den Gedanken kommst mit length zu arbeiten, da Objekte keine Länge haben. Du kannst nur alle Eigenschaften des Objektes durchwandern mit einer for in Schleife.

    Struppi.

    1. Hi,

      Ich hab ein 3dim-JS-Array average. Die ersten beiden Schlüssel sind gegeben, ich hab also average[0123]['test']. Nun möchte ich alle Schlüssel in der 3ten dimension von average[0123]['test'] ausgeben lassen. Wie kann ich das machen?
      Das ist kein Array!
      Das sind Objekte und die "Schlüssel" sind Attribute. Du hast also ein Objekt average mit dem Attribut '0123' (wobei man hier aufpassen muss, wenn du das wirklich als Array definierst, dan hat dein Array 123 leere Einträge,

      Nein, 82. 0123 = 83. Denn 1 * 8^2   +   2 * 8^1   +   3 * 8^0 = 63.

      Probier mal javascript:alert(0123) in der Adreßzeile Deines Browsers. Nur der Opera macht es (m.E.) falsch.
      Siehe http://devedge.netscape.com/library/manuals/2000/javascript/1.5/guide/ident.html#1008351

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.mud-guard.de/