Philipp Hasenfratz: Probleme mit einem Code-Fragment.

Beitrag lesen

Halihallo Maja

Ich habe ein Problem mit einem Codefragment, das sauber funktioniert, für mich aber völlig unverständlich ist.
var s = [1,4,6,2,3,1,56,71,1,4,56,3,71], t = {}, i = 0;
for (i=0; i < s.length; i++) {
    if (!t[s[i]])
        t[s[i]] = 0;
    t[s[i]]++;
}

Nun, in t hast du nachher ein Array stehen, dessen Indizies den
verschiedenen Zahlen aus s entsprechen und dessen Werte die Anzahl
Aufkommen derjenigen ist.
In deinem Beispiel von oben hast du bei t[56]=2, da 56 als Wert von
s zwei mal vorkommt.

Ich verstehe insbesondere die Sachen mit dem "t = {}" und "t[s[i]]++;" nicht. Kann mir das bitte jemand von euch erklären?

Die Konstruktion "t = {}" ist mir, wie ich gestehen muss, neu. Ich
nehme an, dass es einfach ein typenloses Objekt anlegt, dass nachher
bei der Verwendung von "t[s[i]]" in ein Array-Objekt gecastet wird
(was eine Vergewaltigung ist, der Autor hätte das Array auch gleich
als solches definieren müssen). Aber ich möchte dem Autor hier keinen
Vorwurf machen, da ich nicht mal weiss, ob ich recht habe...

die if-Abfrage "if (!t[s[i]]) t[s[i]] = 0;" dient dazu den Wert beim
aktuellen Index auf 0 zu setzen, falls der Index noch nicht
existiert. Nachfolgend wird dieser Wert dann incrementiert (eins
dazugezählt). Folge: Du hast am Schluss in t[s[i]] genau die Anzahl
Aufkommen der Zahl s[i] in dem Array s stehen.

Der Operator ++ incrementiert (erhöht den Wert um 1) die Variable:
t[s[i]]++ greift also auf den Arrayindex s[i] im Array t zu und
erhöht dessen Wert um eins.
Um das Verständnis zu erhöhen:

t[s[i]]++ ist nichts anderes als t[s[i]] = t[s[i]] + 1 und das ist
nichts anderes als t[s[i]] += 1. Da Programmierer jedoch Tippfaul
sind, wurde mit der Zeit einfach t[s[i]]++ daraus...

Viele Grüsse

Philipp