Daniel Thoma: Array sortieren

Beitrag lesen

Hallo Bernhard

Danke für die Korrektur. Die If Abfrage ist mir noch unklar, leider hatte ich bis jetzt nicht viel mit assoziativen Arrays gearbeitet.

Erst mal ein kleines Beispiel eines assoziativen Arrays:

var a = new Array();
a["key"] = "value";

if(!elements[list[a]]) { //Wenn der Array elements das Element nicht als Schlüssel enthält, <---- ?
      elements[list[a]] = 1; //Füge es hinzu und setze den Wert auf 1.          <---- ?
    }
    else if(elements[list[a]] == 1) { //Wenn dem Element der Wert 1 zugeordnet ist,
      elements[list[a]] = 2; //setze den Wert auf 2
      ret.push(list[a]); //und füge das Element der Ergebnisliste hinzu.
    }

"Wenn der Array elements das Element nicht als Schlüssel enthält" bedeutet das, ist das Element im Array nicht vorhanden dann füge es hinzu und setzt auf 1?

Ja.

Bsp. wenn ich in einem Formular 10 Elemente habe, Begin mit TEXT0 bis TEXT9 (TEXT4 kommt 2 Mal vor im Abstand von 3 Elementen) und jetzt möchte ich es wissen ob ein Element sich wiederholt und wie oft sich der Element wiederholt, also wird in der If Abfrage geprüft, Begin mit dem ersten Element, ist der TEXT0 als Schlösserwert im Array elements nicht enthalten dann füge es hinzu und setze sein Wert auf 1, verstehe ich das richtig?

Ja.

»»Falls ja hat der TEXT0 jetzt den Wert 1, das gleiche gescheit mit den weitern Elementen bis wir das Element TEXT4 treffen, die gleiche Prozedur findet wider statt, TEXT4 hat jetzt den Wert 1, der Ablauf geht weiter bis der zweite Element TEXT4 gefunden wird, das Element ist schon als Schlüssel enthalten also wird also wird der zweite Teil der If Abfrage aktiv?
Auch richtig.

»»An dieser Stelle kommt mir ein Frage auf, woher weist die If Abfrage der der Element TEXT4 schon da war?
In der if-schleife wird der Wert abgefragt, der für das Element im Array elements steht.
Ist das Element noch nicht aufgetaucht, gibt es gar keinen Eintrag, der Rückgabewert ist also undefined, was in einer if-Frage wie ein Rückgabewert false behandelt wird.
Kam das Element schon einmal vor, ist der Wert 1 (oder 2), was in der if-Schleife wie ein Wert true behandelt wird.

Das liegt an der automatischen Typenumwandlung von JavaScript.
Da ein boolscher Typ (true/false) erwartet wird, wandelt Javascript den gefundenen Wert in true oder false um.
0, undefined und "" (der leere String) werden zu false.
Alles andere wird zu true.

Grüße

Daniel