IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Valeur dans un tableau qui ne s'affiche pas - Cannot read property '1' of undefined


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    Points : 101
    Points
    101
    Par défaut Valeur dans un tableau qui ne s'affiche pas - Cannot read property '1' of undefined
    Bonjour à tous ,

    j'ai un soucis avec un script.
    Des valeurs sont dans un tableau à deux dimensions.

    je voulais simplement réaliser un affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    function affiche()
    { 
    ...
     
    for(var i=1; i<= monTableau.length; i++){
    			for(var j=0; j<= 29; j++){
    	if ( i == 1 ) 
    {
    			res = 
    		"<center><h3 style='color:#3d85c6';> Information </h3></center>"+
    		"<p style='color:#3d85c6';> "+other+" <br>"+
    		country+" / "+City +"<br>" +
    		" valeur " + monTableau[i][2];
     
    }
    if ( i == 2 )
    {
     res = res + 
    		"<center><h3 style='color:#3d85c6';> Information 2 </h3></center>"+
    		"<p style='color:#3d85c6';> "+other+" <br>"+
    		country+" / "+City +"<br>" +
    		" valeur " + monTableau[i][2];
    }
    document.getElementById("info").innerHTML = res;
     
    }

    mon erreur :
    Uncaught TypeError: Cannot read property '2' of undefined
    ca doit être un truc simple , mais je comprends pas pourquoi , je peux pas afficher la même choses plus tard dans ma boucle.

    Merci d'avance.
    kirua99

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    On ne sait pas à quoi ressemble ton tableau, donc difficile de trouver la cause...

    Peut-être as-tu oublié que les indices d'un tableau commencent à 0...
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(var i=1; i<= monTableau.length; i++)
    est incorrect.

  3. #3
    Expert confirmé Avatar de Barsy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    1 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 484
    Points : 5 279
    Points
    5 279
    Par défaut
    Comment génères-tu la variable "monTableau". Il doit lui manquer une valeur sur la deuxième colonne à la position 'i'.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    Points : 101
    Points
    101
    Par défaut
    mon tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    var monTableau = new Array;
    for(var i=0; i<data.getNumberOfRows(); i++){
    	//alert(data.getValue(i, 1) +" --- "+ other); 
     
    		if (  data.getValue(i, 0) == Zone
    		&& data.getValue(i, 1) == other 
    		&& data.getValue(i, 2) == country 
    		&& data.getValue(i, 3) == City 
    		&&  data.getValue(i, 4) == LabName  )		
    		{
     
    nb = nb + 1;
     
    		monTableau[nb=new Array()
     
    			for(var b=0; b<=29; b++){
     
    	monTableau[nb][b] = data.getValue(i, b);
     
    	}
    }
    Pour mettre ces valeurs mon tableau , en faisant des contrôles d'alerte , tout semble correct.

    Kirua99

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    Points : 101
    Points
    101
    Par défaut
    Désolé pour le double post

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for(var i=1; i<= monTableau.length; i++){
    	for(var j=0; j<= 29; j++){
    	if ( i == 1 ) 
    	{		
    		res = 
    		"<center><h3 style='color:#3d85c6';> Information </h3></center>"+
    		"<p style='color:#3d85c6';> "+other+" <br>"+
    		country+" / "+City +"<br>" +
    		" valeur " + monTableau[i][2] +
    		" valeur2 " + monTableau[i][5];
    	}
    ce code si marche correctement aucun problème


    Par contre celui la non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    for(var i=1; i<= monTableau.length; i++){
    	for(var j=0; j<= 29; j++){
    		if ( i == 1 ) 
    		{		
    			res = 
    			"<center><h3 style='color:#3d85c6';> Information </h3></center>"+
    			"<p style='color:#3d85c6';> "+other+" <br>"+
    			country+" / "+City +"<br>" +
    			" valeur " + monTableau[i][2] +
    			" valeur2 " + monTableau[i][5];
    		}
    		if ( i == 2 ) 
    		{		
    			res = res +
    			"<br><center><h3 style='color:#3d85c6';> Information </h3></center>"+
    			"<p style='color:#3d85c6';> "+other+" <br>"+
    			country+" / "+City +"<br>" +
    			" valeur " + monTableau[i][2] +
    			" valeur2 " + monTableau[i][5];
    		}
    	}
    }

  6. #6
    Expert confirmé Avatar de Barsy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    1 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 484
    Points : 5 279
    Points
    5 279
    Par défaut
    Alors c'est que la variable "monTableau" ne contient pas 3 valeurs.
    Ou que la variable "monTableau[2]" ne contient pas 3 valeurs.

    Fait un alert sur monTableau[2] et sur monTableau[2][2] pour voir.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    Points : 101
    Points
    101
    Par défaut
    ba normalement j'affiche si dans mon tableau si le i est a 2 ou il est a 1 .

    et oui mais y a des moments ou le tableau à pour i seulement 1.

  8. #8
    Expert confirmé Avatar de Barsy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    1 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 484
    Points : 5 279
    Points
    5 279
    Par défaut
    Citation Envoyé par kirua99 Voir le message
    mais y a des moments ou le tableau à pour i seulement 1.
    Voilà d'où vient l'erreur.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    Points : 101
    Points
    101
    Par défaut
    pourtant il génere uniquement si je met un tableau a 1 dimension ou a 2 dimension

    je vais devoir regarder plus prés sa alors .
    si j ai des probléme , je vous en fera part alors .

  10. #10
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    var monTableau = new Array manque (), monTableau[nb manque un crochet ]=new Array()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(var i=1; i<= monTableau.length; i++){
    	for(var j=0; j<= 29; j++){
    pourquoi une boucle sur j alors que j n'est jamais utilisé.

    enfin je te renvois vers tableau-double-entree-plus-infos/

    A+JYT

  11. #11
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(var i=1; i<= monTableau.length;i++)
    Les index commencent à zéro et se terminent à length -1 !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(var i=0; i< monTableau.length;i++)

  12. #12
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    dans 90% des cas il est plus simple d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (data in monTableau) {
      for (value in data) {
        alert(value);
      }
    }
    d'ailleurs je ne vois pas dans ton cas l'intérêt de passer par un tableau de tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    var monTableau = new Array();
    for(var i=0; i<data.getNumberOfRows(); i++){
      if (  data.getValue(i, 0) == Zone
    		&& data.getValue(i, 1) == other 
    		&& data.getValue(i, 2) == country 
    		&& data.getValue(i, 3) == City 
    		&& data.getValue(i, 4) == LabName  )		
      {
      var row = { //définir un objet permet de nommer les attributs et d'être sur de sa structure
        other :    data.getValue(i, 1),
        country :  data.getValue(i, 2),
        City :     data.getValue(i, 3),
        LabName  : data.getValue(i, 4),
      }
      monTableau.push(row); //un simple push évite de trainer un indice n pour rien
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    res = "";//en initialisant res avant la boucle on n'a plus besoin du if
    for (row in monTableau) {
      res = [
        res, 
        "<br><center><h3 style='color:#3d85c6';> Information </h3></center>",
        "<p style='color:#3d85c6';> ",
        other, // <= ICI je ne sais pas d'où sort la variable other
        " <br>",
        country,// <= ICI je ne sais pas d'où sort la variable country 
        " / ",
        City ,// <= ICI je ne sais pas d'où sort la variable City 
        "<br> valeur ",
        row.country, // <= on utilise les attributs de l'objet à la place d'indice dans un tableau
        " valeur2 ",
        row.City
      ].join() ;
    }
    le code est bien plus lisible
    A+JYT

  13. #13
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    dans 90% des cas il est plus simple d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (data in monTableau) {
      for (value in data) {
        alert(value);
      }
    }
    Au contraire il est déconseillé d'utiliser for...in pour boucler sur les éléments d'une Array, car la boucle passe par toutes les propriétés énumérables de l'objet Array et pas seulement les éléments du tableaux. Il peut arriver de nombreux cas où cela entraîne des bugs très difficiles à déceler, par exemple lorsque le prototype de Array a été étendu par certaines librairies ou lorsque la longueur de l'array a été modifiée dynamiquement.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var arr = new Array(5); 
    for(var e in arr){ alert("in:" + e); }
    for(var e=0; e<arr.length; e++){ alert("length:" + e); }
    En revanche, for..in est tout à fait approprié pour parcourir les propriétés d'un objet.
    Plus d'infos ici : http://stackoverflow.com/questions/5...uch-a-bad-idea

  14. #14
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 657
    Points
    44 657
    Par défaut
    Bonjour,
    Citation Envoyé par SylvainPV
    ...car la boucle passe par toutes les propriétés énumérables de l'objet Array et pas seulement les éléments du tableaux...
    dans ce cas un bon réflexe hasOwnProperty
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Object.prototype.test = function(){};
    var i, tab = new Array('1', '2');
    for( var i in tab) {
      if (tab.hasOwnProperty(i)) {
        console.log(i);
      }
    }

  15. #15
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Une version un peu plus "moderne" :
    • pour un tableau (Array)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    monTableau.forEach(function(valeur, indice, monTableau){
        console.log(valeur, indice, monTableau);
    }, objetThis);
    • pour un objet (Object)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var liste = Object.keys(monObjet);
    liste.forEach(function(valeur){
        console.log(this[valeur]);
    }, monObjet)

  16. #16
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Si on veut être ultra-moderne, on peut aussi parler de for...of

Discussions similaires

  1. [WD10] Afficher des valeurs dans un tableau
    Par dj-julio dans le forum WinDev
    Réponses: 4
    Dernier message: 19/03/2014, 11h32
  2. Un tableau qui ne s'affiche pas
    Par stc074 dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 17/03/2011, 18h55
  3. ListView dans un TVisualFormView qui ne s'affiche pas
    Par GlobeTrotteuse dans le forum C++
    Réponses: 1
    Dernier message: 25/06/2010, 16h22
  4. Réponses: 1
    Dernier message: 13/05/2010, 16h13
  5. Réponses: 1
    Dernier message: 28/08/2009, 02h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo