116 votes

Vérifier si le tableau est vide ou nul

Je voudrais savoir comment vérifier si un tableau est vide ou nul en jQuery. J'ai essayé array.length === 0 mais ça n'a pas marché. Il n'y a pas eu d'erreur non plus.

Voici 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
}

2 votes

De la même manière qu'en "JavaScript normal" : stackoverflow.com/questions/2672380/

1 votes

Julien, j'ai essayé toutes les solutions énumérées dans ce fil avant de commencer ce fil. Aucune d'entre elles n'a fonctionné.

0 votes

Peut-on avoir un peu plus de code pour le contexte ? JavaScript environnant, HTML ? Etes-vous sûr que $("input[name='album_text[]']") renvoie en fait des éléments ?

180voto

jfriend00 Points 152127

Tant que votre sélecteur fonctionne réellement, je ne vois rien de mal dans votre code qui vérifie la longueur du tableau. Cela devrait faire ce que vous voulez. Il existe de nombreuses façons de nettoyer votre code pour le rendre 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 que if ($(this)) . Il se peut qu'il n'y ait aucun objet DOM à l'intérieur, mais vous pouvez vérifier cela avec $(this).length si vous en avez besoin, mais ce n'est pas nécessaire ici car la .each() La boucle ne fonctionnerait pas s'il n'y avait pas d'éléments, donc $(this) à l'intérieur de votre .each() La boucle sera toujours quelque chose.
  2. Il est inefficace d'utiliser $(this) plusieurs fois dans la même fonction. Il vaut mieux le placer une fois dans une variable locale et l'utiliser ensuite à partir de cette variable locale.
  3. Il est recommandé d'initialiser les tableaux à l'aide de la fonction [] plutôt que new Array() .
  4. if (value) lorsque la valeur est attendue comme étant une chaîne de caractères protégera à la fois de value == null , value == undefined y value == "" pour que vous n'ayez pas à faire if (value && (value != "")) . Vous pouvez le faire : if (value) pour vérifier les trois conditions de vide.
  5. if (album_text.length === 0) vous dira si le tableau est vide tant qu'il s'agit d'un tableau valide et initialisé (ce qui est le cas ici).

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

5 votes

@MaciekSemik - voir stackoverflow.com/questions/359494/ . J'utilise toujours l'égalité stricte ( === ), sauf si je souhaite spécifiquement autoriser une conversion de type. C'est une bonne habitude à prendre.

80voto

Mayank Raipure Points 343

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

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

2 votes

Beaucoup plus fiable que la vérification de la longueur, surtout si votre variable peut aussi être un objet (avec les objets, la longueur ne fonctionne pas pour vérifier si elle est vide).

0 votes

C'est la réponse la plus appropriée à mon avis.

4 votes

isEmptyObject retourne toujours false si Array.prototype est étendu, par exemple Array.prototype.someFunction = function () {}; - même si le tableau est vide. Notez que certains frameworks (par exemple Ember.js) étendent le prototype Array par défaut.

9voto

rhinoxi Points 111

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

Dans le doc isEmptyObject il mentionne :

L'argument doit toujours être un simple objet JavaScript

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

8voto

Daniel A. White Points 91889

Vous devez vérifier si '' (chaîne vide) avant de le pousser dans votre tableau. Votre tableau a des éléments qui sont des chaînes vides. Ensuite, votre album_text.length === 0 fonctionnera très bien.

0 votes

Veuillez voir la mise à jour du code. J'ai ajouté ce code if( $(this).val() && $(this).val() != '') Pourtant, cela ne fonctionne pas.

2voto

Amit Geek Points 11
/*
  Basic Checking with undefined array for Jquery Array
*/
if (typeof myArray !== 'undefined' && myArray.length > 0) {
    console.log('myArray is not empty.');
}else{
    console.log('myArray is empty.');
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X