Wie überprüfe ich, ob das Array leer ist oder nicht existiert? [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
bekloppt

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

Etwas wie das?

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

  • Sie können dies einfach mit if(array && array.length){//do stuff} tun, es ist eine kompaktere Methode

    – Kamran

    10. November 2017 um 8:15 Uhr


  • Die verwandte Frage, wie sichergestellt werden kann, dass ein Array erstellt wird, unterscheidet sich von dieser Frage, bei der es darum geht, festzustellen, ob ein Array entweder nicht vorhanden oder leer ist.

    – Eduard Brey

    27. November 2018 um 19:24 Uhr

  • @EdwardBrey ja, aber das hilft mir nicht, ich möchte es nicht erstellen und vielleicht bin ich mir nicht sicher, wie ich den Teil zum Erstellen aus diesen Antworten entfernen soll …

    – Claudius Creanga

    15. März 2019 um 11:49 Uhr

Benutzer-Avatar
Robby Cornelissen

Sie möchten die Überprüfung durchführen für undefined Erste. Wenn Sie es umgekehrt machen, wird ein Fehler generiert, wenn das Array nicht definiert ist.

if (array === undefined || array.length == 0) {
    // array empty or does not exist
}

Aktualisieren

Diese Antwort erhält ziemlich viel Aufmerksamkeit, daher möchte ich darauf hinweisen, dass meine ursprüngliche Antwort vor allem die falsche Reihenfolge der in der Frage zu bewertenden Bedingungen ansprach. In diesem Sinne werden mehrere Szenarien nicht behandelt, z null Werte, andere Arten von Objekten mit a length Eigenschaft usw. Es ist auch kein sehr idiomatisches JavaScript.

Der narrensichere Ansatz

Inspiriert von den Kommentaren, halte ich unten für die narrensichere Methode, um zu überprüfen, ob ein Array leer ist oder nicht existiert. Es berücksichtigt auch, dass sich die Variable möglicherweise nicht auf ein Array bezieht, sondern auf einen anderen Objekttyp mit a length Eigentum.

if (!Array.isArray(array) || !array.length) {
  // array does not exist, is not an array, or is empty
  // ⇒ do not attempt to process array
}

Um es aufzuschlüsseln:

  1. Array.isArray()prüft wenig überraschend, ob sein Argument ein Array ist. Dadurch werden Werte wie ausgemerzt null, undefined und alles andere, was kein Array ist.
    Beachten Sie, dass dies ebenfalls eliminiert wird Array-ähnliche Objekteso wie die arguments Objekt und DOM NodeList Objekte. Abhängig von Ihrer Situation ist dies möglicherweise nicht das gewünschte Verhalten.

  2. Das array.length Bedingung prüft, ob die Variable length Eigenschaft bewertet zu a Wahrheit Wert. Da die vorherige Bedingung bereits feststellte, dass es sich tatsächlich um ein Array handelt, sind strengere Vergleiche wie array.length != 0 oder array.length !== 0 sind hier nicht erforderlich.

Der pragmatische Ansatz

In vielen Fällen mag das Obige wie ein Overkill erscheinen. Vielleicht verwenden Sie eine Sprache höherer Ordnung wie TypeScript, die den größten Teil der Typprüfung zur Kompilierungszeit für Sie übernimmt, oder es ist Ihnen wirklich egal, ob das Objekt tatsächlich ein Array oder nur ein Array ist.

In diesen Fällen tendiere ich dazu, mich für das folgende, idiomatischere JavaScript zu entscheiden:

if (!array || !array.length) {
    // array or array.length are falsy
    // ⇒ do not attempt to process array
}

Oder, häufiger, seine Umkehrung:

if (array && array.length) {
    // array and array.length are truthy
    // ⇒ probably OK to process array
}

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

if (!array?.length) {
    // array or array.length are falsy
    // ⇒ do not attempt to process array
}

Oder das Gegenteil:

if (array?.length) {
    // array and array.length are truthy
    // ⇒ probably OK to process array
}

  • Ein Array Objekt ist nicht das einzige Objekt, das eine Längeneigenschaft hat. Das “kürzeste” Möglichkeit zu bestimmen, ob eine Variable definiert ist und ein Array wäre dies: if (typeof varName !== 'undefined' && Object.getPrototypeOf(Object(varName)) === Object.getPrototypeOf([])) { console.log('varName is an array'); }

    – Elias Van Ootegem

    25. Juni 2014 um 8:33 Uhr


  • let isArrayWithLength = Boolean(Array.isArray(array) && array.length);

    – mynameistechno

    16. Dezember 2016 um 19:06 Uhr

  • Benutzen === um die ESLint-Warnung in der Bedingungsprüfung von array.length zu vermeiden.

    – kvrao127

    17. März 2018 um 10:23 Uhr


  • @yeyo Array.length ist eine Dateneigenschaft. Es wird nicht bei jedem Zugriff berechnet.

    – Robby Cornelissen

    12. Dezember 2018 um 6:01 Uhr

  • Wenn array ist leer, !array.length ist true!!

    – Leoschet

    13. Februar 2019 um 22:32 Uhr

1011400cookie-checkWie überprüfe ich, ob das Array leer ist oder nicht existiert? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy