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?

11voto

sqram Punkte 6791
foo = [0, 1, 2, "", , false, 3, "four", null]

foo.filter(function(e) {
    return e === 0 ? '0' : e
})

gibt zurück.

[0, 1, 2, 3, "four"]

8voto

Jason Bunting Punkte 56534

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 möchten, 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:

function removeFalsyElementsFromArray(someArray) {
    var newArray = [];
    for(var index = 0; index < someArray.length; index++) {
        if(someArray[index]) {
            newArray.push(someArray[index]);
        }
    }
    return newArray;
}

Es gibt jedoch eine allgemeinere Lösung:

function removeElementsFromArray(someArray, filter) {
    var newArray = [];
    for(var index = 0; index < someArray.length; index++) {
        if(filter(someArray[index]) == false) {
            newArray.push(someArray[index]);
        }
    }
    return newArray;
}

// then provide one or more filter functions that will 
// filter out the elements based on some condition:
function isNullOrUndefined(item) {
    return (item == null || typeof(item) == "undefined");
}

// then call the function like this:
var myArray = [1,2,,3,,3,,,,,,4,,4,,5,,6,,,,];
var results = removeElementsFromArray(myArray, isNullOrUndefined);

// results == [1,2,3,3,4,4,5,6]

Sie verstehen, was ich meine - Sie könnten auch andere Arten von Filterfunktionen haben. Wahrscheinlich mehr als Sie brauchen, aber ich war großzügig... ;)

6voto

Gapur Kassym Punkte 973

Sie sollten Filter verwenden, um ein Array ohne leere Elemente zu erhalten. Beispiel für ES6

const array = [1, 32, 2, undefined, 3];
const newArray = array.filter(arr => arr);

6voto

VIJAY P Punkte 1253

Wie wäre es damit (ES6) : Falsy-Wert aus einem Array zu entfernen.

var arr = [0,1,2,"test","false",false,true,null,3,4,undefined,5,"end"];

arr.filter((v) => (!!(v)==true));

//output:

//[1, 2, "test", "false", true, 3, 4, 5, "end"]

5voto

Goku Nymbus Punkte 571

Bei der Verwendung der am höchsten bewerteten Antwort oben, erstes Beispiel, erhielt ich einzelne Zeichen für Zeichenfolgenlängen größer als 1. unten ist meine Lösung für dieses Problem.

var stringObject = ["", "some string yay", "", "", "Other string yay"];
stringObject = stringObject.filter(function(n){ return n.length > 0});

Anstatt nicht zurückzugeben, wenn undefiniert, geben wir zurück, wenn length größer als 0 ist. Ich hoffe, das hilft jemandem da draußen.

Devuelve

["some string yay", "Other string yay"]

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