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
}
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
}
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
}
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:
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.
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
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