Leere Elemente aus einem Array in Javascript entfernen
Wie kann ich leere Elemente aus einem Array in JavaScript entfernen?
Gibt es einen einfachen Weg, oder muss ich eine Schleife durchlaufen und sie manuell entfernen?
987
3
EDIT: Diese Frage wurde vor fast neun Jahren beantwortet, als es noch nicht viele nützliche eingebaute Methoden in
Array.prototype
gab.Jetzt würde ich Ihnen auf jeden Fall empfehlen, die Methode "filter" zu verwenden.
Denken Sie daran, dass diese Methode Ihnen ein neues Array mit den Elementen zurückgibt, die die Kriterien der Rückruffunktion erfüllen, die Sie ihr zur Verfügung stellen.
Zum Beispiel, wenn Sie
null
oderundefined
Werte entfernen wollen:Es hängt davon ab, was Sie als "leer" betrachten. Wenn Sie beispielsweise mit Strings arbeiten, würde die obige Funktion keine Elemente entfernen, die ein leerer String sind.
Ein typisches Muster, das oft verwendet wird, ist das Entfernen von Elementen, die falsy sind, was eine leere Zeichenkette
""
,0
,NaN
,null
,undefined
undfalse
einschließt.Sie können der Methode
Filter
die KonstruktorfunktionBoolean
übergeben oder dasselbe Element beispielsweise in der Funktion Filterkriterien zurückgeben:Oder
In beiden Fällen funktioniert dies, weil die "Filter"-Methode im ersten Fall den "Boolean"-Konstruktor als Funktion aufruft und den Wert umwandelt, und im zweiten Fall wandelt die "Filter"-Methode den Rückgabewert des Rückrufs intern implizit in "Boolean" um.
Wenn Sie mit spärlichen Arrays arbeiten und versuchen, die "Löcher" loszuwerden, können Sie die Methode
filter
verwenden, die einen Callback übergibt, der z.B. true zurückgibt:Alte Antwort: Tun Sie das nicht!
Ich verwende diese Methode, indem ich den nativen Array-Prototyp erweitere:
Oder Sie können die vorhandenen Elemente einfach in ein anderes Array verschieben:
Möglicherweise ist es einfacher, eine Schleife über Ihr Array zu ziehen und ein neues Array aus den Elementen zu erstellen, die Sie aus dem Array behalten wollen, als zu versuchen, eine Schleife zu ziehen und zu spleißen, wie es vorgeschlagen wurde, da die Änderung der Länge des Arrays, während es in einer Schleife geführt wird, Probleme verursachen kann.
Sie könnten etwa so vorgehen:
Hier ist eigentlich eine allgemeinere Lösung:
Sie verstehen die Idee - Sie könnten dann andere Arten von Filterfunktionen haben. Wahrscheinlich mehr als Sie brauchen, aber ich war großzügig... ;)
Versuchen Sie dies. Übergeben Sie Ihr Array und es wird mit entfernten leeren Elementen zurückgegeben. *Aktualisiert, um den von Jason aufgezeigten Fehler zu beheben