web-dev-qa-db-fra.com

Vérifier si le tableau est vide ou nul

Je voudrais savoir comment vérifier si un tableau est vide ou nul dans jQuery. J'ai essayé array.length === 0 mais cela n'a pas fonctionné. Il n'a pas jeté d'erreur non plus.

C'est le code:

var album_text = new Array();

$("input[name='album_text[]']").each(function(){
  if( $(this).val() &&  $(this).val() != '') {
    album_text.Push($(this).val());
  }
});
if (album_text.length === 0) {
  $('#error_message').html("Error");
}

else {
  // send data
}
97
input

Tant que votre sélecteur fonctionne, je ne vois aucun problème avec votre code qui vérifie la longueur du tableau. Cela devrait faire ce que vous voulez. Il y a beaucoup de façons de nettoyer votre code pour qu'il soit plus simple et plus lisible. Voici une version nettoyée avec des notes sur ce que j'ai nettoyé.

var album_text = [];

$("input[name='album_text[]']").each(function() {
    var value = $(this).val();
    if (value) {
        album_text.Push(value);
    }
});
if (album_text.length === 0) {
    $('#error_message').html("Error");
}

else {
  //send data
}

Quelques notes sur ce que vous faisiez et ce que j'ai changé.

  1. $(this) est toujours un objet jQuery valide. Il n'y a donc aucune raison de vérifier if ($(this)). Il ne contient peut-être aucun objet DOM, mais vous pouvez vérifier cela avec $(this).length si vous en avez besoin, mais ce n'est pas nécessaire ici car la boucle .each() ne s'exécute pas s'il n'y a pas d'éléments. $(this) à l'intérieur de votre boucle .each() sera toujours quelque chose.
  2. Il est inefficace d'utiliser $ (this) plusieurs fois dans la même fonction. Il est bien mieux de l’obtenir une fois dans une variable locale, puis de l’utiliser à partir de cette variable locale.
  3. Il est recommandé d'initialiser les tableaux avec [] plutôt que new Array().
  4. if (value) lorsque la valeur d'une chaîne est censée être protégée contre value == null, value == undefined et value == "" afin que vous n'ayez pas à utiliser if (value && (value != "")). Vous pouvez simplement faire: if (value) pour vérifier les trois conditions vides.
  5. if (album_text.length === 0) vous dira si le tableau est vide tant que le tableau est initialisé et valide (ce qui est ici).

Qu'essayez-vous de faire avec ce sélecteur $("input[name='album_text[]']")?

148
jfriend00

L'utilisateur JQuery est EmptyObject pour vérifier si le tableau contient ou non des éléments.

var testArray=[1,2,3,4,5];
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true
66
Mayank Raipure

Vous devriez vérifier '' (chaîne vide) avant de pousser dans votre tableau. Votre tableau a des éléments qui sont des chaînes vides. Ensuite, votre album_text.length === 0 fonctionnera parfaitement.

8
Daniel A. White

Je pense qu'il est dangereux d'utiliser $ .isEmptyObject de jquery pour vérifier si le tableau est vide, comme l'a mentionné @jesenko. Je viens de rencontrer ce problème.

Dans le isEmptyObject doc , il est mentionné:

L'argument doit toujours être un objet JavaScript simple.

que vous pouvez déterminer par $.isPlainObject. Le retour de $.isPlainObject([]) est faux.

7
rhinoxi