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?
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?
var arr = [1,2,,3,,-3,null,,0,,undefined,4,,4,,5,,6,,,,];
arr.filter(n => n)
// [1, 2, 3, -3, 4, 4, 5, 6]
arr.filter(Number)
// [1, 2, 3, -3, 4, 4, 5, 6]
arr.filter(Boolean)
// [1, 2, 3, -3, 4, 4, 5, 6]
oder - (nur für einzeln Array-Elemente vom Typ "Text")
['','1','2',3,,'4',,undefined,,,'5'].join('').split('');
// output: ["1","2","3","4","5"]
oder - Klassischer Weg: einfache Iteration
var arr = [1,2,null, undefined,3,,3,,,0,,,[],,{},,5,,6,,,,],
len = arr.length, i;
for(i = 0; i < len; i++ )
arr[i] && arr.push(arr[i]); // copy non-empty values to the end of the array
arr.splice(0 , len); // cut the array and leave only the non-empty values
// [1,2,3,3,[],Object{},5,6]
var arr = [1,2,,3,,3,,,0,,,4,,4,,5,,6,,,,];
arr = $.grep(arr, n => n == 0 || n);
// [1, 2, 3, 3, 0, 4, 4, 5, 6]
EDITAR: Diese Frage wurde vor fast neun Jahren beantwortet, als es noch nicht viele nützliche integrierte Methoden in der Array.prototype
.
Natürlich würde ich Ihnen empfehlen, die filter
Methode.
Beachten Sie, dass diese Methode Ihnen ein neues Array mit den Elementen, die die Kriterien der von Ihnen angegebenen Rückruffunktion erfüllen.
Wenn Sie zum Beispiel Folgendes entfernen möchten null
o undefined
Werte:
var array = [0, 1, null, 2, "", 3, undefined, 3,,,,,, 4,, 4,, 5,, 6,,,,];
var filtered = array.filter(function (el) {
return el != null;
});
console.log(filtered);
Es hängt davon ab, was Sie als "leer" betrachten. Wenn Sie beispielsweise mit Zeichenketten arbeiten, würde die obige Funktion keine Elemente entfernen, die eine leere Zeichenkette sind.
Ein typisches Muster, das häufig verwendet wird, besteht darin, Elemente zu entfernen, die falsy die eine leere Zeichenkette enthalten ""
, 0
, NaN
, null
, undefined
y false
.
Sie können an den filter
Methode, die Boolean
Konstruktorfunktion, oder geben Sie dasselbe Element z.B. in der Filterkriterienfunktion zurück:
var filtered = array.filter(Boolean);
Oder
var filtered = array.filter(function(el) { return el; });
In beiden Fällen funktioniert dies, weil die filter
im ersten Fall, ruft die Methode Boolean
Konstruktor als eine Funktion, die den Wert umwandelt, und im zweiten Fall wird der filter
Methode intern den Rückgabewert des Rückrufs implizit in Boolean
.
Wenn Sie mit spärlichen Arrays arbeiten und versuchen, die "Löcher" loszuwerden, können Sie die filter
Methode, die einen Callback übergibt, der z.B. true zurückgibt:
var sparseArray = [0, , , 1, , , , , 2, , , , 3],
cleanArray = sparseArray.filter(function () { return true });
console.log(cleanArray); // [ 0, 1, 2, 3 ]
Alte Antwort: Tun Sie das nicht!
Ich verwende diese Methode und erweitere den nativen Array-Prototyp:
Array.prototype.clean = function(deleteValue) {
for (var i = 0; i < this.length; i++) {
if (this[i] == deleteValue) {
this.splice(i, 1);
i--;
}
}
return this;
};
test = new Array("", "One", "Two", "", "Three", "", "Four").clean("");
test2 = [1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,];
test2.clean(undefined);
Oder Sie können die vorhandenen Elemente einfach in ein anderes Array verschieben:
// Will remove all falsy values: undefined, null, 0, false, NaN and "" (empty string)
function cleanArray(actual) {
var newArray = new Array();
for (var i = 0; i < actual.length; i++) {
if (actual[i]) {
newArray.push(actual[i]);
}
}
return newArray;
}
cleanArray([1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,]);
Wenn Sie ALLE leeren Werte ("", null, undefiniert und 0) entfernen müssen:
arr = arr.filter(function(e){return e});
Um leere Werte und Zeilenumbrüche zu entfernen:
arr = arr.filter(function(e){ return e.replace(/(\r\n|\n|\r)/gm,"")});
Beispiel:
arr = ["hello",0,"",null,undefined,1,100," "]
arr.filter(function(e){return e});
Rückkehr:
["hello", 1, 100, " "]
UPDATE (basierend auf dem Kommentar von Alnitak)
In manchen Situationen möchten Sie vielleicht "0" im Array behalten und alles andere (null, undefiniert und "") entfernen, dies ist eine Möglichkeit:
arr.filter(function(e){ return e === 0 || e });
Rückkehr:
["hello", 0, 1, 100, " "]
Einfach nur ein Liner:
[1, false, "", undefined, 2].filter(Boolean); // [1, 2]
oder mit underscorejs.org :
_.filter([1, false, "", undefined, 2], Boolean); // [1, 2]
// or even:
_.compact([1, false, "", undefined, 2]); // [1, 2]
Wenn Sie Javascript 1.6 oder höher haben, können Sie Array.filter
mit einer trivialen return true
Rückruf-Funktion, z.B.:
arr = arr.filter(function() { return true; });
seit .filter
überspringt automatisch fehlende Elemente im ursprünglichen Array.
Die oben verlinkte MDN-Seite enthält auch eine schöne Version zur Fehlerprüfung von filter
die in JavaScript-Interpretern verwendet werden können, die die offizielle Version nicht unterstützen.
Beachten Sie, dass dadurch nicht die null
Einträge noch Einträge mit einem expliziten undefined
Wert, aber der Auftraggeber hat ausdrücklich um "fehlende" Einträge gebeten.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.