wahsaga: Doubletten aus Array entfernen

Beitrag lesen

hi,

Klappt - aber das Problem ist hier, dass ich hier nicht weiß, was da passiert. Das Skript müßte man mir wirklich Zeile_für_Zeile ins Doofen-Deutsch übersetzen - und wer von Euch hat da schon Lust drauf ... ;-)

<translation from="javascript" to="doofen-deutsch">

Array.prototype.unique = function()

Dem Array-Objekt wird per prototype eine neue Methode hinzugefügt - diese besitzen danach _alle_ Array-Objekte, egal ob vorher schon oder danach erst erzeugt.

var o = {};

Die lokale Variable o wird als neues Object angelegt - ist das gleiche, wie var o = new Object();

for(var i = 0 ; i < this.length; i++)
o[this[i]] = true;

Hier passiert das "umdrehen", welches Sven schon erwähnte:
Für jedes Array-Element mit dem Wert "xyz" wird eine Object-Eigenschaft xyz hinzugefügt, und mit dem Wert true versehen.
Da Objekteigenschaften eindeutige Namen haben, würde das nächste Array-Element, dessen Wert auch "xyz" ist, hier keine weitere Objekt-Eigenschaft erzeugen, sondern die bereits vorhandene überschreiben - wiederum mit dem Wert true.
Wir haben also nach Ablauf dieser Schleife ein Objekt, welches für jeden _mindestens_ einmal im Array vorkommenden Wert eine gleichnamige Eigenschaft mit dem Wert true besitzt. Kam ein Wert im Array mehrmals vor, haben wir trotzdem nur _genau eine_ solche Eigenschaft - weil wegen Eindeutigkeit von Eigenschaftnamen und "Überschreibung".
Also haben wir jetzt schon dafür gesorgt, dass die mehrmals vorkommenden Werte nur noch einmal vorhanden sind - nur derzeit noch "auf der falschen Seite", denn wenn wir ein Objekt mal als assoziatives Array ansehen, haben wir jetzt unsere Werte als Schlüssel - also müssen wir jetzt noch aus Schlüsseln wieder Werte machen, und einen neuen fortlaufenden nummerischen Index erzeugen.

var tmp = new Array();

Jetzt wird ein neues Array angelegt,

for(var i in o) tmp[tmp.length] = i;

und für jede Eigenschaft des Objektes o, deren Eigenschaften-Namen die for-in-Schleife in i liefert, ein neues Array-Element angelegt.
(Neue Elemente ans Ende eines nummerischen Arrays anfügen kann man nicht nur über die push-Methode, sondern auch, in dem man dem nächstfolgenden Index einfach den entsprechenden Wert zuweist. Und da Javascript bei 0 an zu zählen fängt, liefert in einem nummerischen Array mit fortlaufenden Schlüsseln die length-Eigenschaft immer den nächsten "noch freien" Index.)

return tmp;

Und jetzt wird noch das so neu erzeugte Array als Rückgabewert der Methode unique() zurückgegeben.

</translation>

gruß,
wahsaga

--
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }