Enrico: Arrays werden nicht korrekt aufgebaut

Beitrag lesen

Hallo Mathias,

vielen herzlichen Dank für Deine sehr ausführliche Hilfe :-)

Damit sollte die funktionierende Umsetzung meines Vorhabens kein Problem mehr darstellen.

Gruß,
Enrico

Hallo,

Dein Script ist nur »halb fertig«, du hast es für mehrere Rubriken angelegt, aber es wird letztlich nur eine extrahiert. Da müsstest du im oberen Teil auch mit verschachtelten Schleifen arbeiten, wenn du eine variable Anzahl von Rubriken unterstützen willst.

So könnte die Behandlung *einer* Rubrik aussehen (ich hab’s mal sehr vereinfacht):

var Variablenpaare = Formulardaten.split("&");

var RubrikDaten = new Array(Felder[Rubrik][0]);
for (var i = 0, l1 = Variablenpaare.length; i < l1; i++)
{
   var VariableWert = Variablenpaare[i].split("=");
   var Variable = VariableWert[0];
   var Wert     = VariableWert[1];
   for (var j = 1, l2 = Felder[Rubrik].length; j < l2; j++) {
      if (Variable.indexOf(Felder[Rubrik][j]) !== -1) {
         RubrikDaten.push(Wert);
      }
   }
}

var Ausgabe = "";
for (i = 1, l = RubrikDaten.length; i < l; i++) {
   Ausgabe += RubrikDaten[i];
   if (i < l - 1) {
      Ausgabe += '<br>';
   }
}
document.write(Ausgabe);


>   
> Für mehrere Rubriken musst du den obigen Teil nun wiederholen – etwa mit einer Schleife, die eine Funktion aufruft.  
>   
>   
> Davon abgesehen noch allgemeine Tipps:  
>   
> Dein Vorhaben sowie die konkrete Umsetzung scheinen mir problematisch. ROT13 ist keine ernsthafte Verschlüsselung und taugt höchstens zur simplen Verschleierung. Ich kann nicht ganz nachvollziehen, wieso diese Verarbeitung mit JavaScript erfolgen soll. Gut, dazu hast du auch nicht viel geschrieben.  
>   
> Jedenfalls rate ich dir, dich genauer mit JavaScript zu beschäftigen. Z.B. in dem du ein gutes Buch durcharbeitest. Dein Code und die Herangehensweise können nämlich an verschiedenen Stellen verbessert werden.  
>   
> Code sollte bestenfalls in wiederverwendbaren Funktionen strukturiert werden, welche lokale anstatt globale Variablen verwenden. Du verwendest überall globale Variablen ohne »var«. Variablen sollten auch mit Kleinbuchstaben beginnen, das ist eine sinnvolle Konvention, um sie von Konstruktoren zu unterscheiden.  
>   
> Neben Arrays gibt es in JavaScript noch andere Datenstrukturen, die sich besser eignen, um unter einem bestimmten Schlüssel (Objekteigenschaft) einen Wert zu speichern. Objekte können einfach mit dem [Object-Literal](http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#object-literale) `{…}`{:.language-javascript} erzeugt werden. Ein Beispiel:  
>   
> ~~~javascript

var rubriken = {};  

>   
> var versand = {};  
> // Erzeuge Felder  
> versand.vorname = 'Enrico';  
> versand.nachname = 'Mustermann';  
> // Und so weiter, das kann programmatisch erfolgen  
>   
> // Geht auch mit einem variablen Eigenschaftnamen:  
> var eigenschaft = 'plz';  
> versand[eigenschaft] = 12345;  
> // Dies hat eine plz-Eigenschaft angelegt  
>   
> // Speichere versand-Objekt im rubriken-Objekt  
> rubriken.versand = versand;  
>   
> // … weitere Objekte auf diese Weise erzeugen und zu rubriken hinzufügen …  
>   
> var ausgabe = '';  
> // Durchlaufe Rubriken mit einer [ref:self812;javascript/sprache/schleifen.htm#for@title=for-in-Schleife]  
> for (var rubrikName in rubriken) {  
>   ausgabe += '<h2>' + rubrikName + '</h2>';  
>   // Durchlaufe Felder der Rubrik  
>   var rubrik = rubriken[rubrikName];  
>   for (var feldName in rubrik) {  
>     ausgabe += '<p>' + feldName + ': ' + rubrik[feldName] + '</p>';  
>   }  
> }  
> document.write(ausgabe);

Solche Objektstrukturen eignen sich viel besser als verschachtelte Arrays.

Parallel zum Object-Literal gibt es übrigens auch den Array-Literal:

var array = [1, 2, 3];

[] entspricht new Array(), allerdings ist es schneller, einfacher zu schreiben und eindeutig. new Array() erzeugt nämlich, wenn nur eine Zahl x übergeben wird, keinen Array mit x als Eintrag, sondern einen Array mit x undefined-Einträgen. [eintrag1, eintrag2, … eintragN] erzeugt immer einen Array mit eben jenen Einträgen.

Grüße,
Mathias