756 Stimmen

Wie überprüfe ich, ob ein Array leer ist oder nicht existiert?

Was ist der beste Weg zu überprüfen, ob ein Array leer ist oder nicht existiert?

Ist es so etwas?

if(array.length < 1 || array == undefined){
    //leer
}

1495voto

Robby Cornelissen Punkte 81773

Sie möchten zuerst auf undefined überprüfen. Wenn Sie es andersherum machen, wird ein Fehler generiert, wenn das Array undefiniert ist.

if (array === undefined || array.length == 0) {
    // Array existiert nicht oder ist leer
}

Aktualisierung

Diese Antwort erhält ziemlich viel Aufmerksamkeit, daher möchte ich darauf hinweisen, dass meine ursprüngliche Antwort vor allem die falsche Reihenfolge der ausgewerteten Bedingungen in der Frage behandelte. In diesem Sinne versäumt es, mehrere Szenarien zu berücksichtigen, wie z.B. null-Werte, andere Arten von Objekten mit einer length-Eigenschaft usw. Es ist auch nicht sehr idiomatisches JavaScript.

Der narrensichere Ansatz
In Anlehnung an die Kommentare hier ist, was ich derzeit als narrensichere Möglichkeit betrachte, zu überprüfen, ob ein Array leer ist oder nicht existiert. Es berücksichtigt auch, dass die Variable möglicherweise nicht auf ein Array, sondern auf einen anderen Typ von Objekt mit einer length-Eigenschaft verweist.

if (!Array.isArray(aufzählung) || !array.length) {
  // Array existiert nicht, ist kein Array oder ist leer
  // Array nicht verarbeiten
}

Zum Aufschlüsseln:

  1. Array.isArray() überprüft erwartungsgemäß, ob ihr Argument ein Array ist. Das filtert Werte wie null, undefined und alles andere, was kein Array ist, heraus.
    Beachten Sie, dass dies auch array-ähnliche Objekte ausschließt, wie das arguments-Objekt und DOM-NodeList-Objekte. Je nach Situation ist dies möglicherweise nicht das gewünschte Verhalten.

  2. Die Bedingung array.length überprüft, ob die length-Eigenschaft der Variable einen wahren Wert ergibt. Da die vorherige Bedingung bereits festgestellt hat, dass wir es tatsächlich mit einem Array zu tun haben, sind weitere strenge Vergleiche wie array.length != 0 oder array.length !== 0 hier nicht erforderlich.

Der pragmatische Ansatz
In vielen Fällen mag das oben Genannte übertrieben erscheinen. Vielleicht verwenden Sie eine Sprache der höheren Ordnung wie TypeScript, die den Großteil der Typenüberprüfung bereits zur Kompilierzeit für Sie erledigt, oder es ist Ihnen wirklich egal, ob das Objekt tatsächlich ein Array ist oder nur array-ähnlich.

In solchen Fällen tendiere ich zu folgendem, idiomatischeren JavaScript:

if (!array || !array.length) {
    // Array oder Array.length sind falsy
    // Array nicht verarbeiten
}

Oder häufiger, sein Gegenteil:

if (array && array.length) {
    // Array und Array.length sind truthy
    // Wahrscheinlich OK zum Verarbeiten des Arrays
}

Mit der Einführung des optionalen Verkettungsoperators (Elvis-Operator) in ECMAScript 2020 kann dies noch weiter verkürzt werden:

if (!array?.length) {
    // Array oder Array.length sind falsy
    // Array nicht verarbeiten
}

Oder das Gegenteil:

if (array?.length) {
    // Array und Array.length sind truthy
    // Wahrscheinlich OK zum Verarbeiten des Arrays
}

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