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 de prévisualisation; alerter l'utilisateur pour appuyer sur le bouton de nouvelle image; créer le tableau vide pour y mettre des images;

le problème est que image_array dans le else feux tout le temps. Si le tableau existe - il ne fait que l'annuler, mais alerter le travail de dosent.

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 ceci

<?php if(count($images) != 0): ?>
<script type="text/javascript">
    <?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>
213
demandé sur user1564141 2012-07-31 19:17:28

19 réponses

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

votre problème peut se produire en raison 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 ensuite assurez-vous que vous ne redéclarez jamais accidentellement cette variable plus tard:

else {
    ...
    image_array = []; // no var here
}
344
répondu jbabey 2012-07-31 15:37:40

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

  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){}

CoffeeScript Version

  if array?.length > 0

Remarque: Ne pas l'utiliser, il ya une meilleure façon de trouver des si un tableau existe et c'est non-vide .


pourquoi?

"1519250920 Cas" Undefined

la variable non définie est une variable à laquelle vous n'avez encore rien assigné.

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

Case Null

Généralement parlant, nul est l'état de défaut d'une 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

Cas Pas un Tableau

Javascript a un système de type dynamique. Cela signifie que nous ne pouvons pas garantir quel type d'objet a variable contient.

Il y a une chance que nous ne parlions pas d'une instance de Array .

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

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

Case Vide

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

afin de s'assurer qu'il n'est pas vide, nous demandons à un certain nombre d'éléments qu'il tient, et s'assurer qu'il a plus de zéro éléments.

firstArray = [];
firstArray.length > 0;  // => false
secondArray = [1,2,3];
secondArray.length > 0; // => true
91
répondu Pooyan Khosravi 2018-02-12 22:37:53

que dire de (ECMA 5.1):

if(Array.isArray(image_array) && image_array.length){
  // array exists and is not empty
}
43
répondu Queequeg 2016-02-22 19:32:54

vous devez utiliser:

  if (image_array!=undefined && image_array.length > 0)
14
répondu Samson 2012-07-31 15:21:48

si vous voulez tester si la variable image array avait é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
}
9
répondu Mike Brant 2012-07-31 15:27:51

C'est ce que j'utilise. La première condition couvre truthy, qui a à la fois nul et non défini. Seconde condition vérifie pour un tableau vide.

if(arrayName && arrayName.length > 0){
    //do something.
}

ou grâce au commentaire de tsemer j'ai ajouté une deuxième version

if(arrayName && arrayName.length)

puis j'ai fait un test pour la deuxième condition, en utilisant Scratchpad dans Firefox:

var array1;
var array2 = [];
var array3 = ["one", "two", "three"];
var array4 = null;

de la console.log(matrice1); console.log(tableau2); console.log(array3); console.log(array4);

if(array1 && array1.length){
  console.log("array1! has a value!");
}

if(array2 && array2.length){
  console.log("array2! has a value!");
}

if(array3 && array3.length){
  console.log("array3! has a value!");
}

if(array4 && array4.length){
  console.log("array4! has a value!");
}

puis les résultats:

Non défini

[]

["un", "deux", "trois"]

null

et le test final qui indique

if(array2 && array2.length){

est le même que

if(array2 && array2.length > 0){

array3! a une valeur!

9
répondu James Drinkard 2016-11-10 06:20:40

L'utilisateur JQuery est 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 
5
répondu Mayank Raipure 2015-10-30 12:14:12

pour moi sûr que certaines des réponses de haute qualité" fonctionnent " quand je les mets dans jsfiddle, mais quand j'ai une quantité générée dynamiquement de liste de tableau une grande partie de ce code dans les réponses ne fonctionne tout simplement pas pour moi.

C'est ce qui fonctionne pour moi.

var from = [];

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

avis, Pas de guillemets non définis et je ne m'occupe pas de la longueur.

3
répondu Tom Stickel 2015-07-13 23:36:44

JavaScript

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

Lodash Et Trait De Soulignement

( _.isArray(myArray) && myArray.length > 0 )
2
répondu Amit Bhagat 2018-06-08 10:38:23

si vous n'avez pas de variable déclarée comme tableau vous pouvez créer un contrôle:

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 elle existe, vérifie si c'est un tableau rempli. autre chose, elle crée un tableau vide (ou vous pouvez faire d'autres choses);

si vous êtes certain il y a une variable array créée il y a une simple vérification:

var x = [];

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

, Vous pouvez cocher la case mon violon ici avec plus de moyens possibles pour vérifier le tableau.

1
répondu Plippie 2015-01-29 10:47:29

je suis tombé sur ce problème beaucoup dans Javascript. Pour moi, la meilleure façon de le faire est de mettre un très large vérifier avant de vérifier pour la longueur. J'ai vu d'autres solutions dans ce Q&r, mais je voulais être en mesure de vérifier soit null ou undefined ou toute autre fausse valeur.

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

ceci vérifiera d'abord undefined , null , ou d'autres valeurs fausses. Si l'un d'eux est vrai, il complétera le booléen comme ceci est un OR . Ensuite , le contrôle plus risqué de array.length , qui pourrait nous induire en erreur si le tableau n'est pas défini, peut être vérifié. Cela ne sera jamais atteint si array est undefined ou null , de sorte que l'ordre des conditions est très important.

1
répondu Jim Factor 2017-04-03 17:46:47

utilisant undescore ou lodash :

_.isArray(image_array) && !_.isEmpty(image_array)

1
répondu Umanshield 2017-06-03 09:25:22

et ça ? la vérification de la longueur du tableau non défini peut jeter l'exception.

if(image_array){
//array exists
    if(image_array.length){
    //array has length greater than zero
    }
}
1
répondu Nikul Patel 2018-05-15 02:49:37

quand vous créez votre image_array, il est vide, donc votre image_array.longueur est 0

comme indiqué dans le commentaire ci-dessous, je modifie ma réponse basée sur cette réponse de la question ):

var image_array = []

dans les crochets else ne change rien à l'image_array défini avant dans le code

0
répondu Al_th 2017-05-23 11:47:15

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
répondu shivam malhotra 2016-03-16 08:45:30

Essayez ci-dessous,

if(array.results != undefined) - specific to SharePoint

ou

if(array.length > 0)
0
répondu Amay Kulkarni 2016-10-04 15:06:46

une manière simple qui n'entraîne pas d'exceptions si elles n'existent pas et convertir en booléen:

!!array

exemple:

if (!!arr) {
  // array exists
}
0
répondu insign 2017-09-24 14:35:43

voici le mien pour ajouter à la longue liste de réponses:

d'abord, vérifier length n'est pas suffisant pour vérifier le type, car

const fakeArray1 = { length: "very long" };
const fakeArray2 = { length: "1337", data: {} };
if (fakeArray1.length) {...} // is true
if (fakeArray2.length > 0) {...} // is also true

donc vous devez vérifier pour le type réel, soit

image_array.constructor === Array ou Array.isArray(image_array)

Now the magic (note: utiliser la magie dans JS est dangereux et exige de la dextérité et de la responsabilité) , lors de l'utilisation de type de comparaison n'importe quelle paire de l'égalité ci-dessous est véridique

[] == false; [] == 0; [] == ''; [null] == false

So! c'est en train de sortir: p

MA RÉPONSE

if(Array.isArray(image_array) && image_array == false) {
  // handle the case where, either
  // - the array don't exist
  // - the array is empty
  // - it contains only one empty element
}

Note: (conseiller)

utiliser un contrôle non typé est considéré comme une mauvaise pratique dans JS et quelqu'un pourrait vouloir ajouter le troisième = , changer le comportement de votre code. Je conseille donc d'envelopper cette vérification dans une fonction util afin de ne pas entrer dans votre logique et manquer compris par les pairs.

0
répondu Xeltor 2017-10-13 15:54:25

dans ts

 isArray(obj: any) 
{
    return Array.isArray(obj)
  }

en html

(photos == indéterminé || !(isArray (photos) & & photos.Longueur > 0))

0
répondu velan 2018-08-13 11:36:19