Maja: Probleme mit einem Code-Fragment.

Hallo zusammen.

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]]++;
}

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

Viel Dank im Voraus.

Maja

  1. 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