2016-05-19 4 views
0

Ich möchte ein neues Verfahren zum Array.prototype anbringt:Wie Array-Elemente an Ort und Stelle ersetzen

Array.prototype.uniq = function(){ 
    return this.filter((val, index) => { 
    return this.indexOf(val) === index; 
    }); 
}; 

var a = [1, 1, 2, 3]; 
console.log(a.uniq()); // output: [1,2,3] 
console.log(a); // output: [1,1,2,3] 

Die Methode entfernt Duplikate aus einem Array. Das Problem, das ich habe, ist, dass immer wenn uniq aufgerufen wird, ein neues Array zurückgegeben wird. Ich möchte so etwas wie dies zu tun:

Array.prototype.uniq = function(){ 
    this = this.filter((val, index) => { // "ReferenceError: Invalid left-hand side in assignment 
    return this.indexOf(val) === index; 
    }); 
}; 

so dass:

var a = [1, 1, 2, 3]; 
a.uniq(); 
console.log(a); // output: [1,2,3] 

Was soll ich tun?

+2

Warum nicht einfach 'a = a.uniq()'? – Schleis

+1

@Schleis das funktioniert, aber ich bin nur neugierig, wie man es in Prototyp – Cheng

+0

[Wie Elemente im Array mit Elementen eines anderen Arrays ersetzen] (http://stackoverflow.com/questions/17511273/how-to-replace) Elemente in Array mit Elementen eines anderen Arrays – GingerPlusPlus

Antwort

4

Sie können über das Array mit der Schleife for iterieren und splice verwenden, wenn der Index nicht identisch ist.

Array.prototype.uniq = function() { 
    // Reverse iterate 
    for (var i = this.length - 1; i >= 0; i--) { 

     // If duplicate 
     if (this.indexOf(this[i]) !== i) { 
      // Remove from array 
      this.splice(i, 1); 
     } 
    } 

    // Return updated array 
    return this; 
}; 

var a = [1, 1, 2, 3]; 
a.uniq(); 
console.log(a); // output: [1,2,3] 
+1

Thx! Ich dachte über Splice nach, aber der Index ändert sich, wenn ich Elemente aus dem Array entferne. Reverse Iterate ist sehr schlau :) Die 'return this' Zeile wird nicht benötigt, oder? – Cheng

+0

Tushar, sollten die Indizes innerhalb der for-Schleife nicht 'i-1' sein, weil 'i = this.length' 'this [i]' aus der Schleife macht. – Cheng

Verwandte Themen