web-dev-qa-db-fra.com

Vérifiez si le tableau est vide ou n'existe pas. JS

Quel est le meilleur moyen de vérifier si un tableau est vide ou n'existe pas?

Quelque chose comme ça?

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

Vous voulez faire le contrôle de undefined en premier. Si vous le faites dans l'autre sens, cela générera une erreur si le tableau n'est pas défini.

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

Mise à jour

Cette réponse suscite beaucoup d'attention, alors j'aimerais souligner que ma réponse initiale, plus que toute autre chose, traitait du mauvais ordre des conditions évaluées dans la question. En ce sens, il ne parvient pas à traiter plusieurs scénarios, tels que les valeurs null, d'autres types d'objets dotés d'une propriété length, etc. Il ne s'agit pas non plus de JavaScript idiomatique.

L'approche infaillible
S'inspirant des commentaires, voici ce que je considère actuellement comme le moyen infaillible de vérifier si un tableau est vide ou n'existe pas. Il prend également en compte 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 le décomposer:

  1. Array.isArray() , sans surprise, vérifie si son argument est un tableau. Ceci élimine des valeurs telles que null, undefined et tout ce qui n'est pas un tableau.
    Notez que cela éliminera également les objets de type tableau , tels que l'objet arguments et DOM NodeList objets. Selon votre situation, cela pourrait ne pas être le comportement que vous recherchez.

  2. La condition array.length vérifie si la propriété length de la variable est évaluée à une valeur vérité . Comme la condition précédente indiquait déjà que nous utilisions bien un tableau, des comparaisons plus strictes telles que array.length != 0 ou array.length !== 0 ne sont pas requises ici.

L'approche pragmatique
Dans beaucoup de cas, ce qui précède peut sembler excessif. Peut-être utilisez-vous un langage d'ordre supérieur, tel que TypeScript, qui effectue l'essentiel de la vérification de type lors de la compilation, ou vous ne vous souciez pas vraiment de savoir si l'objet est en réalité un tableau, ou simplement semblable à un tableau.

Dans ces cas, j'ai tendance à préférer le code JavaScript plus idiomatique suivant:

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
}
564
Robby Cornelissen