1650 Stimmen

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?

117voto

tsh Punkte 3669

Zum Entfernen von Löchern sollten Sie Folgendes verwenden

arr.filter(() => true)
arr.flat(0) // New in ES2019

Zum Entfernen von Loch, Null und undefiniert:

arr.filter(x => x != null)

Zum Entfernen von löchrigen und falschen (null, undefiniert, 0, -0, 0n, NaN, "", false, document.all) Werten:

arr.filter(x => x)

arr = [, null, (void 0), 0, -0, 0n, NaN, false, '', 42];
console.log(arr.filter(() => true)); // [null, (void 0), 0, -0, 0n, NaN, false, '', 42]
console.log(arr.filter(x => x != null)); // [0, -0, 0n, NaN, false, "", 42]
console.log(arr.filter(x => x)); // [42]

Nota:

  • Löcher sind einige Array-Indizes ohne Elemente.

    arr = [, ,]; console.log(arr[0], 0 in arr, arr.length); // undefined, false, 2; arr[0] is a hole arr[42] = 42; console.log(arr[10], 10 in arr, arr.length); // undefined, false, 43; arr[10] is a hole

    arr1 = [1, 2, 3]; arr1[0] = (void 0); console.log(arr1[0], 0 in arr1); // undefined, true; a[0] is undefined, not a hole

    arr2 = [1, 2, 3]; delete arr2[0]; // NEVER do this please console.log(arr2[0], 0 in arr2, arr2.length); // undefined, false; a[0] is a hole

  • Alle oben genannten Methoden geben eine Kopie des gegebenen Arrays zurück und ändern es nicht an Ort und Stelle.

    arr = [1, 3, null, 4]; filtered = arr.filter(x => x != null); console.log(filtered); // [1, 3, 4] console.log(arr); // [1, 3, null, 4]; not modified

60voto

Tomás Senart Punkte 1373

Die saubere Art, es zu tun.

var arr = [0,1,2,"Thomas","false",false,true,null,3,4,undefined,5,"end"];
arr = arr.filter(Boolean);
// [1, 2, "Thomas", "false", true, 3, 4, 5, "end"]

53voto

AmerllicA Punkte 22941

Tatsächlich können Sie ES6+ Methoden, nehmen Sie an, dass das Feld unten ist:

 const arr = [1,2,3,undefined,4,5,6,undefined,7,8,undefined,undefined,0,9];

Und die Antwort könnte eine der beiden Möglichkeiten sein:

  • Erster Weg:

    const clearArray = arr.filter(i => i); // [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
  • Zweiter Weg:

    const clearArray = arr.filter(Boolean); // [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

    const arr = [1,2,3,undefined,4,5,6,undefined,7,8,undefined,undefined,0,9]; console.log("arr.filter(i => i)", arr.filter(i => i)); console.log("arr.filter(Boolean)", arr.filter(Boolean));

43voto

Kanan Farzali Punkte 951

ES6:

let newArr = arr.filter(e => e);

42voto

ML13 Punkte 857

Einfaches ES6

['a','b','',,,'w','b'].filter(v => v);

CodeJaeger.com

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.

Powered by:

X