2016-12-05 7 views
0

Ich habe ein Array mit den folgenden Elementen:Javascript: Suchen und löschen * alle * wiederholte Elemente

A 
B 
B 
C 
B 

Wenn ein Element mehr als einmal erscheint, ich habe alle seine Vorkommen zu löschen. Deshalb ist es so sein würde:

A 
C 

Ich habe festgestellt, viele Beispiele dafür, wie die anderen sich wiederholende Elemente zu entfernen, aber immer noch das „Original“ verlassen ein, aus, dass ich konnte nichts näher an ihm finden und ich bin wirklich verloren.

Ich habe darüber nachgedacht, in einem Objekt Folgendes zu speichern: 1. Der Wert des Artikels; 2. Wie oft es erscheint; 3. Die Position aller Erscheinungen.

Wenn die Zeiten erschien mehr als 1 war, würde ich alle folgenden Positionen im Array entfernen. Ist es eine gute Idee? Was wäre der beste Weg, dies zu tun?

Vielen Dank!

+0

gleich ist, zu klären Sie wollen nur das Original-Array ändern, erstellen Sie kein neue mit den Elementen aus dem ursprünglichen Array entfernt? – Daryl

+0

Eine Möglichkeit besteht darin, ein neues Array zu erstellen und die ursprünglichen Werte nur dann zu überprüfen, wenn der Wert bereits im neuen Array vorhanden ist. Vielleicht nicht die beste Lösung, aber ist eine Möglichkeit: P – Medda86

+0

@Daryl Es wäre besser, wenn es in einem neuen Array wäre :) – PossessWithin

Antwort

9

Sie können dies filter() mit tun und geben nur einzigartige Elemente durch Prüfen, ob indexOf zu lastIndexOf

var ar = ['A', 'B', 'B', 'C', 'B']; 
 
var result = ar.filter(function(e) { 
 
    return ar.indexOf(e) == ar.lastIndexOf(e); 
 
}) 
 

 
console.log(result)

+1

@Nenad, Nizza! Und anstelle von 'ar.indexOf (e)' könnten Sie den aktuellen Index verwenden, den 'filter' bereits für seinen zweiten Parameter enthält, um ihn mit 'ar.lastIndexOf (e)' zu vergleichen. Die Signatur ist 'Filter (Element, Index, Array)' –

+0

der Rückruf ist nicht wiederverwendbar. –

+0

vielen Dank! – PossessWithin

Verwandte Themen