Wie überprüft man, ob ein Array in JavaScript leer ist?
Das hängt davon ab, was du mit Array, und leer ist meinst.
Im weiteren Verlauf bezeichne ich die Variable die das Array enthält als arr, und die elemente die enthalten sind als e0 bis en. Also:
const arr = [e0, … en]
Was ist mit Array gemeint?
In javascript (anders als in Typsecript, bzw. streng typisierten Sprachen), kannst du nicht davon ausgehen, das deine Variable den Typ hat den du erwartest. Theoretisch kann in einer Variable erst einmal alles stehen, und davon hängt ganz stark ab, was mit "leer ist" gemeint ist. Wenn du also wirklich sicher gehen willst, musst du sicher stellen oder prüfen, ob es sich wirklich um ein Array handelt (Array.isArray(arr)… und antizipieren welche Inhalte es hat/haben könnte. Denn ein Array aus Arrays (meist multi-dimensionales Array), oder Objekten genau eines Typs, oder wild durcheinander gewürfelten Inhalten stellt andere Anforderungen an die Überprüfung.
Was ist mit leer gemeint?
Auf Anhieb fallen mir x Zustände ein, die als "leer sein" interpretiert werden können:
const arr, => arr ist undefined
const arr = null;
bedeutet eigentlich das es sich gar nicht um ein Array handelt, und fällt unter Überprüfung ob es ein Array ist, aber muss mit bedacht werden.
const arr = []
const arr = [undefined] aber auch [undefined, undefined]
const arr = [null] aber auch [null, null]
const arr = [''] oder jederandere als "falsy" interpretierte Wert, bzw. Werte. ['','']
Klar, die meisten werden natürlich sofort auf const arr = [] deuten und sagen "DAS" ist ein leeres Array. Wäre auch meine "Bauchreaktion". Aber auch die anderen Varianten sind mitzudenken, und auszuschließen oder zu behandeln.
Antwort:
Um zu prüfen, ob ein Array "leer" ist, musst du den Unterschied zwischen false und falsy, sowie true und truthy kennen, und wissen, welche Prüfmethoden wie auf false/falsy bzw. true/truthy reagieren).
Du musst sicher sein, das dein Array als solches existiert: Array.isArray(arr).
Du musst wissen, ob arr.length 0 (const arr = []), 1 (const arr = [false/falsy]) oder n (n false/falsy Werte) sein darf.
Du musst falls arr.length > 0 sein darf, für jedes Element prüfen, ob es deine Bedingung für leer (false oder falsy?) erfüll istt, und diese Prüfung darf nicht an exotischen Konstellationen / edge cases scheitern.
Im einfachsten Fall, leer bedeutet const arr = [], reicht ein
arr.length === 0, ggf. abgesichert durch Array.isArray(arr).
In komplexeren Fällen, ist die Prüfung auf isArray und arr.length === 0 der erste Schritt, gefolgt von arr.some(e => yourIsNotEmptyCheck(e)).