574 votes

Vérifier si un tableau est vide ou existe

Lorsque la page se charge pour la première fois, je dois vérifier s'il y a une image dans le dossier de l'utilisateur. image_array et charger la dernière image.

Sinon, je désactive les boutons de prévisualisation, j'alerte l'utilisateur pour qu'il appuie sur le bouton de nouvelle image et je crée un tableau vide pour y placer les images ;

Le problème est que image_array dans le else se déclenche tout le temps. Si un tableau existe, il le remplace, mais l'alerte ne fonctionne pas.

if(image_array.length > 0)
    $('#images').append('<img src="'+image_array[image_array.length-1]+'" class="images" id="1" />');
else{
    $('#prev_image').attr('disabled', 'true');
    $('#next_image').attr('disabled', 'true');
    alert('Please get new image');
    var image_array = [];
}

MISE À JOUR Avant de charger le html, j'ai quelque chose comme ceci :

<?php if(count($images) != 0): ?>
<script type="text/javascript">
    <?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>

0 votes

Journal de la console image_array - Qu'est-ce que vous obtenez ?

0 votes

@Utkanos s'il y a var image_array = [] - non défini si //var image_array = [] (comenté) - tableau réel.

0 votes

Array ?.length - largement supporté et sera bientôt une fonctionnalité native

689voto

jbabey Points 20696
if (typeof image_array !== 'undefined' && image_array.length > 0) {
    // the array is defined and has at least one element
}

Il se peut que votre problème soit dû à un mélange de variables globales implicites et de levées de variables. Assurez-vous d'utiliser var lors de la déclaration d'une variable :

<?php echo "var image_array = ".json_encode($images);?>
// add var  ^^^ here

Et assurez-vous que vous ne redéclarerez jamais accidentellement cette variable plus tard :

else {
    ...
    image_array = []; // no var here
}

51 votes

Non. Cela va exploser quand image_array est nul. La loi de Murphy dit qu'un jour ça arrivera.

11 votes

N'est-ce pas ? image_array.length assez ? (sans préciser >0 )

0 votes

Curieux : Pouvez-vous trouver un cas d'utilisation qui ne serait pas compatible avec la réponse de @JamesDrinkard ?

346voto

Pooyan Khosravi Points 422

Pour vérifier si un tableau est vide ou non

Une méthode moderne, ES5+ :

if (Array.isArray(array) && array.length) {
    // array exists and is not empty
}

A l'ancienne :

typeof array != "undefined"
    && array != null
    && array.length != null
    && array.length > 0

Une manière compacte :

if (typeof array != "undefined" && array != null && array.length != null && array.length > 0) {
    // array exists and is not empty
}

A la manière de CoffeeScript :

if array?.length > 0

Pourquoi ?

Cas indéfini
Une variable indéfinie est une variable à laquelle vous n'avez encore rien assigné.

let array = new Array();     // "array" !== "array"
typeof array == "undefined"; // => true

Cas Nul
D'une manière générale, null est l'état d'absence de valeur. Par exemple, une variable est nulle lorsque vous avez manqué ou échoué à récupérer certaines données.

array = searchData();  // can't find anything
array == null;         // => true

Case Not an Array
Javascript a un système de type dynamique. Cela signifie que nous ne pouvons pas garantir quel type d'objet une variable contient. Il est possible que nous ne soyons pas en train de parler à une instance de Array .

supposedToBeArray =  new SomeObject();
typeof supposedToBeArray.length;       // => "undefined"

array = new Array();
typeof array.length;                   // => "number"

Case Empty Array
Maintenant que nous avons testé toutes les autres possibilités, nous parlons à une instance de Array . Afin de s'assurer qu'il n'est pas vide, nous demandons le nombre d'éléments qu'il contient, et nous nous assurons qu'il a plus de zéro élément.

firstArray = [];
firstArray.length > 0;  // => false

secondArray = [1,2,3];
secondArray.length > 0; // => true

8 votes

Veuillez noter qu'il est pas Il suffit de vérifier si (typeof array != "undefined" && array.length > 0) car si array est nulle, nous obtiendrons TypeError: Cannot read property 'length' of null .

0 votes

Peut-être changer && par ||

0 votes

!(typeof array !== "undefined") || !(array.length > 0) ? Je viens d'essayer, j'ai obtenu la même erreur. Pouvez-vous nous donner un exemple complet de la manière d'utiliser || ?

19voto

Samson Points 1747

Vous devriez utiliser :

  if (image_array !== undefined && image_array.length > 0)

10voto

Mike Brant Points 39322

Si vous voulez vérifier si la variable tableau d'images a été définie, vous pouvez le faire de la manière suivante

if(typeof image_array === 'undefined') {
    // it is not defined yet
} else if (image_array.length > 0) {
    // you have a greater than zero length array
}

0 votes

0 votes

@user1564141 difficile de dire où la fonction est déclarée par rapport à votre image_array en cours de définition. Vous pourriez avoir un problème d'hébergement, donc vous pourriez avoir besoin de déclarer cette variable comme var index_array = .... De plus, la balise script où vous définissez index_array est fermée. Ce n'est pas ce qui ressort de la capture d'écran.

0 votes

Dans le else il y a aussi une alerte, qui ne se déclenche que si le tableau est vide, mais le var image_array fonctionne à chaque fois... Je ne comprends pas pourquoi ?

6voto

Mayank Raipure Points 343

Vous pouvez utiliser l'outil de jQuery isEmptyObject() 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 

Source : https://api.jquery.com/jQuery.isEmptyObject/

0 votes

C'est la seule chose qui a fonctionné pour moi lorsque j'ai ajouté des éléments avec array.push() - à partir d'éléments ajoutés dynamiquement (ajax). Merci

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