Quelle est la meilleure façon de vérifier si un tableau est vide ou n’existe pas ?
Quelque chose comme ceci ?
if(array.length < 1 || array == undefined){
//empty
}
Vous voulez faire la vérification de undefined
en premier. Si vous le faites dans l'autre sens, une erreur sera générée si le tableau est indéfini.
if (array === undefined || array.length == 0) {
// array empty or does not exist
}
Cette réponse suscite beaucoup d’attention. Je tiens donc à souligner que ma réponse originale portait surtout sur le mauvais ordre des conditions évaluées dans la question. En ce sens, elle ne tient pas compte de plusieurs scénarios, comme les valeurs null
, d'autres types d'objets avec une propriété length
, etc. Ce n'est pas non plus un JavaScript très idiomatique.
L'approche infaillible
En m'inspirant des commentaires, voici ce que je considère actuellement comme la méthode infaillible pour vérifier si un tableau est vide ou n'existe pas. Elle prend également en compte le fait que la variable peut ne pas faire référence à un tableau, mais à un autre type d'objet avec une propriété length
.
if (!Array.isArray(array) || !array.length) {
// array does not exist, is not an array, or is empty
// ⇒ do not attempt to process array
}
Pour décomposer :
Array.isArray()
, sans surprise, vérifie si son argument est un tableau. Cela élimine les valeurs comme null
, undefined
et tout ce qui n'est pas un tableau.
Notez que cela élimine également les objets de type tableau, tels que l'objet arguments
et les objets DOM NodeList
. En fonction de votre situation, il se peut que ce ne soit pas le comportement que vous recherchez.
La condition array.length
vérifie si la propriété length
de la variable évalue une valeur truthy. Comme la condition précédente a déjà établi que nous avons bien affaire à un tableau, des comparaisons plus strictes comme array.length != 0
ou array.length !== 0
ne sont pas nécessaires ici.
**L'approche pragmatique Dans de nombreux cas, ce qui précède peut sembler exagéré. Peut-être utilisez-vous un langage d'ordre supérieur comme TypeScript qui effectue la plupart des vérifications de type à la compilation, ou bien vous ne vous souciez pas vraiment de savoir si l'objet est réellement un tableau ou simplement un tableau.
Dans ces cas-là, j'ai tendance à opter pour le JavaScript suivant, plus idiomatique :
if (!array || !array.length) {
// array or array.length are falsy
// ⇒ do not attempt to process array
}
Ou, plus fréquemment, son inverse :
if (array && array.length) {
// array and array.length are truthy
// ⇒ probably OK to process array
}