Hallo,
Array.prototype.unique = function(){
for (var v, o={}, a=[], n=this.length, i=0; i<n; i++) {
v = this[i];
(v in o) || (o[v] = !a.push(v));}
return a;
};
>
> Schöne Funktion!
Danke.
> Aber if ist in manchen Browsern schneller (in anderen sind beide Varianten identisch)
Ja, klingt komisch, is leider so.
`(v in o)`{:.language-javascript} habe ich bewusst so gewählt, weil damit auch intuitiv deutlich wird, dass es nur darum geht, ob v der Name einer Eigenschaft `in o`{:.language-javascript} ist, oder nicht.
Bei der if-Variante wird dagegen der Inhalt o[v] abgefragt, nicht die bloße Tatsache, ob einer existiert.
Auch die Zuweisung von `!a.push(v)`{:.language-javascript} ist Absicht: o[v] wird wegen der Negation nur mit einem booleschen Wert belegt (immer `false`{:.language-javascript}), der ohnehin nicht von Bedeutung ist. Deine if-Variante weist unnötig den ganzen Rückgabewert von `push`{:.language-javascript} zu (die aktuelle Länge von a).
Gruß, Don P