Don P: Array an funktion übergeben

Beitrag lesen

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