web-dev-qa-db-fra.com

Vérifier si le tableau est vide ou existe

Pour le chargement de la première page, je dois vérifier s'il y a image_array charger la dernière image, sinon bloquer les boutons d'aperçu alerter l'utilisateur au bouton Push new image; créer un tableau vide pour y mettre des images;

Le problème est que image_array dans la else se déclenche tout le temps. Si un tableau existe, il le remplace, mais le dosage des alertes fonctionne.

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 HTML, j'ai quelque chose comme ça

<?php if(count($images) != 0): ?>
<script type="text/javascript">
    <?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>
238
user1564141
if (typeof image_array !== 'undefined' && image_array.length > 0) {
    // the array is defined and has at least one element
}

Votre problème peut être dû à un mélange de variables globales implicites et de levage variable. Assurez-vous d'utiliser var chaque fois que vous déclarez une variable:

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

Et assurez-vous de ne jamais redéclarer cette variable par accident plus tard:

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

Remarque: utilisez non comme ceci, il existe un meilleur moyen de trouver si un tableau existe et qu'il n'est pas vide .

Pour vérifier si un tableau est vide ou non.

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

Version compacte

  if(typeof array != "undefined" && array != null && array.length != null && array.length > 0){}

Version CoffeeScript

  if array?.length > 0

Pourquoi?

Affaire non définie

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

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

Affaire Null

D'une manière générale, null est un état d'absence de valeur . Par exemple, une variable est nulle lorsque vous avez manqué ou échoué lors de l'extraction de certaines données.

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

Case pas un tableau

Javascript a un système de type dynamique. Cela signifie que nous ne pouvons pas garantir le type d'objet qu'une variable détient.
Il est possible que nous ne parlions pas à une instance de Array.

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

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

Case Case vide

Maintenant que nous avons testé toutes les autres possibilités, nous parlons d'une instance de Array.

Afin de vous assurer que ce n'est pas vide, nous demandons le nombre d'éléments qu'il détient, et en vous assurant qu'il a plus de zéro élément.

firstArray = [];
firstArray.length > 0;  // => false
secondArray = [1,2,3];
secondArray.length > 0; // => true
102
Pooyan Khosravi

Qu'en est-il de (ECMA 5.1): 

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

Tu devrais utiliser: 

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

Si vous voulez vérifier si la variable de tableau d’images a été définie, vous pouvez le faire comme ceci:

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

Vous pouvez utiliser la fonction isEmptyObject() de jQuery 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/

5
Mayank Raipure

JavaScript

( typeof(myArray) !== 'undefined' && Array.isArray(myArray) && myArray.length > 0 )

Lodash & Underscore

( _.isArray(myArray) && myArray.length > 0 )
3
Amit Bhagat

Pour moi, certaines des réponses les mieux notées "fonctionnent" lorsque je les mets dans jsfiddle, mais lorsque j'ai une quantité de tableaux générée dynamiquement, la plupart de ce code dans les réponses ne fonctionne tout simplement pas pour moi.

C'est ce que IS travaille pour moi.

var from = [];

if(typeof from[0] !== undefined) {
  //...
}

Remarquez, PAS de citations non définies et je ne me soucie pas de la longueur.

3
Tom Stickel

Que dis-tu de ça ? vérifier la longueur d'un tableau non défini peut générer une exception.

if(image_array){
//array exists
    if(image_array.length){
    //array has length greater than zero
    }
}
2
Nikul Patel

Je rencontre pas mal de problème en Javascript. Pour moi, la meilleure façon de le faire est de faire un test très large avant de vérifier la longueur. J'ai vu d'autres solutions dans ce Q & A, mais je voulais pouvoir vérifier si null ou undefined ou toute autre valeur fausse.

if(!array || array.length == 0){
    console.log("Array is either empty or does not exist")
}

Cela vérifie d'abord undefined, null ou d'autres valeurs fausses. Si l'une d'entre elles est vraie, le booléen sera complet car il s'agit d'une OR. Ensuite, la vérification plus risquée de array.length, qui pourrait nous induire en erreur si le tableau n'est pas défini, peut être vérifiée. Ceci ne sera jamais atteint si array est undefined ou null, la commande des conditions est donc très importante.

1
Jim Factor

Si vous n'avez pas de variable déclarée en tant que tableau, vous pouvez créer une vérification:

if(x && x.constructor==Array && x.length){
   console.log("is array and filed");
}else{
    var x= [];
    console.log('x = empty array');
}

Ceci vérifie si la variable x existe et si c'est le cas, vérifie s'il s'agit d'un tableau rempli. sinon, cela crée un tableau vide (ou vous pouvez faire d'autres choses);

Si vous êtes certain, une variable de tableau est créée. Une vérification simple:

var x = [];

if(!x.length){
    console.log('empty');
} else {
    console.log('full');
}

Vous pouvez vérifier mon violon ici avec montre la plupart des façons possibles de vérifier tableau.

0
Plippie

Ce qui suit est ma solution intégrée dans une fonction qui génère également des erreurs pour gérer quelques problèmes liés à la portée des objets et à tous les types de types de données possibles transmis à la fonction.

Voici mon violon utilisé pour examiner ce problème ( source )

var jill = [0];
var jack;
//"Uncaught ReferenceError: jack is not defined"

//if (typeof jack === 'undefined' || jack === null) {
//if (jack) {
//if (jack in window) {
//if (window.hasOwnP=roperty('jack')){
//if (jack in window){

function isemptyArray (arraynamed){
    //cam also check argument length
  if (arguments.length === 0) { 
    throw "No argument supplied";
  }

  //console.log(arguments.length, "number of arguments found");
  if (typeof arraynamed !== "undefined" && arraynamed !== null) {
      //console.log("found arraynamed has a value");
      if ((arraynamed instanceof Array) === true){
        //console.log("I'm an array");
        if (arraynamed.length === 0) {
            //console.log ("I'm empty");
            return true;
        } else {
          return false;
        }//end length check
      } else {
        //bad type
        throw "Argument is not an array";
      } //end type check
  } else {
    //bad argument
    throw "Argument is invalid, check initialization";;
  }//end argument check
}

try {
  console.log(isemptyArray(jill));
} catch (e) {
    console.log ("error caught:",e);
}
0
Tommie C.

Vous devriez faire ceci

    if (!image_array) {
      // image_array defined but not assigned automatically coerces to false
    } else if (!(0 in image_array)) {
      // empty array
      // doSomething
    }
0
shivam malhotra

Un moyen simple qui ne génère pas d'exceptions sinon existe et convertit en booléen:

!!array

Exemple:

if (!!arr) {
  // array exists
}
0
insign