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 :

Question sur les tableaux (Array)


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Question sur les tableaux (Array)
    Bonjour

    Voila je souhaite composer un tableau de village composé de plusieurs tableau de famille (famille 0 , etc), famille composé d'un tableau de personne avec trois champ "nom","prenom" et "age".

    j'essai de composé ce tableau finale (village) a partir d'une page html et de javascript.

    J'arrive a créer un tableau pour la première famille mais je n'arrive pas a trouvé l'astuce pour mettre la famille dans le tableau village et construire un nouvelle famille...

    lol je pensais que cela serait plus simple a expliquer que cela l’histoire de village , famille, personne s'était pour simplifier mais bon je suis pas sur de l'effet....enfin bref voila le code...

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <html>
    <head>
    <link href="style1.css" rel="stylesheet" type="text/css">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>test</title>
    <script type="text/javascript">
    var famille = [];
    var village = [];
     
    function ajoutpers()
    {
    	var nom = document.getElementById("nom").value;
    	var prenom = document.getElementById("prenom").value;
    	var age = document.getElementById("age").value;
     
    	var pers = [];
    	pers.push(nom,prenom,age);
    	famille.push(pers);
    	for(x=0;x<famille.length;x++)
    	{
    		alert(famille[x][0]+" "+famille[x][1]+" "+famille[x][2]);
    	}
    }
     
    function creerfamille()
    {
    	village[0] = famille;
    	alert(village[0][0][0]);	
    }
     
    </script>
    </head>
    <body>
    <input type='text' id='nom' value=''><br>
    <input type='text' id='prenom' value=''><br>
    <input type='text' id='age' value=''>
    <input type='button' value='ajout pers' onclick='ajoutpers();' />
    <input type='button' value='créer famille' onclick='creerfamille();' />
    </div>
    </body>
    </html>
    donc en gros j'arrive pas a trouver comment mettre ma famille dans mon village et repartir a zéro pour une nouvelle famille.

    D'avance merci pour votre aide

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Je m'en suis finalement sortit en faisant differement le code
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <html>
    <head>
    <link href="style1.css" rel="stylesheet" type="text/css">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>test</title>
    <script type="text/javascript">
     
    var famille = [];
    var tabnb = [];
    var num=0;
     
     
    function ajoutpers()
    {
    	var nom = document.getElementById("nom").value;
    	var prenom = document.getElementById("prenom").value;
    	var age = document.getElementById("age").value;
     
    	var pers = [];
    	pers.push(num,nom,prenom,age);
    	famille.push(pers);
    }
     
    function creerfamille()
    {
    	num++;	
    }
     
    function afffamille(x)
    {
    	for(i=0;i<famille.length;i++)
    	{
    		if(famille[i][0]==x)
    		{
    			alert(famille[i][1]);
    		}
    	}
    }
     
    </script>
    </head>
    <body>
    <input type='text' id='nom' value=''><br>
    <input type='text' id='prenom' value=''><br>
    <input type='text' id='age' value=''>
    <input type='button' value='ajout pers' onclick='ajoutpers();' />
    <input type='button' value='créer famille' onclick='creerfamille();' />
    <input type='button' value='créer famille' onclick='afffamille(1);' />
    </div>
    </body>
    </html>
    Je créer un champ suplémentaire qui correspond au numéro de ma famille que que j'incrémente pour une nouvelle.....cela m'oblige a parcourrir tout le tableau pour afficher une famille mais bon.

    Si quelqu'un a une autre solution je suis preneur.

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    une autre solution aurait été de passer par un array littéral
    ou un objet json ...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Merci pour ta réponse SpaceFrog.

    Ne voyant pas ce que tu entendais pas littéral, j'ai fait quelques recherches.

    Mais cela ne m'aide pas vraiment pour trouver ta solution.

    Le problème dans ma premiere idée c est que quand famille ce trouvé dans village[0] je le pensais sauvegardé mais en fait non si je vide famille le contenue de village[0] faisait de meme.

    je découvre quoi

    Tu pourrais m'éclaircir sur la solution pas tableau littéral ?

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    un array littéral possède non pas des indexes numériques mais des indexes nommés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    myArr= new Array();
    myArr['Hello']="bonjour";
    alert(myArr['hello'])

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 128
    Points : 210
    Points
    210
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    un array littéral possède non pas des indexes numériques mais des indexes nommés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    myArr= new Array();
    myArr['Hello']="bonjour";
    alert(myArr['hello'])
    Houla!!!!!

    Désolé je vais être un peu direct, mais c'est un très mauvais conseil.

    Déjà un "Array littéral" ce n'est pas ça on dit littéral en javascript les objets ou structures de données qui utilisent la "notation littérale".
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // non littéral
    var obj = new Object();
    var arr = new Array();
    var reg = new RegExp("abc");
    var str = new String("str");
     
    // littéral
    var obj = {};
    var arr = [];
    var reg = /abc/;
    var str = "str"
    Donc quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    myArr= new Array();
    myArr['Hello']="bonjour";
    alert(myArr['hello'])
    Déjà tu n'utilise pas de "tableau littéral" de plus tu semble confondre ceque tu appelle tableau litéral avec une Map, ou un "tableau associatif" en PHP.

    Ce n'est pas du tout le cas, ce qui se passe réellement c'est que :

    -1 : tu crée un tableau non littéral, ce tableau hérite de Object
    - 2 : tu attribue une propriété à ce tableau (tu peux le faire car justement il hérite de Object)

    Mais ton tableau est toujours vide !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var arr = [];
    arr['yo'] = 'yo';
    arr.ya = 'ya';
    console.log(arr, arr.yo, arr['ya']); // []   yo   ya
    En gros tu utilise un tableau inutilement, car tout ce que tu utilise c'est l'interface Object.
    Cela nuit à la lisibilité car l'on s'attend à ce que tu utilise un tableau, ce que tu ne fais pas, tu t'expose à des bugs car tu aura un comportement imprévisible si tu utilise des clés numériques, elle seront castés en Double et iront dans le tableau (au contraire des clés non numériques qui créeront des propriétées et non des valeurs dans le tableau).

    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var arr = [];
    arr['yo'] = 'yo';
    arr.ya = 'ya';
    arr['3'] = 'trois',
    console.log(arr, arr.yo, arr['ya']); // [undefined, undefined, undefined, 'trois']   yo   ya
    Pour que ton exemple soit correct il faut utiliser un objet (littéral ou non) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var obj = new Object();
    obj['hello']="bonjour";
    alert(obj['hello']);
     
    // ou
     
    var obj = {};
    obj.hello="bonjour";
    alert(obj.hello);

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    oui desolé abus de langage , je suggérais en fait le tableau associatif

  8. #8
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par TheGwy Voir le message
    ...
    t'es mon nouveau dieu toi, je vais t'engager pour m'apprendre le peu (j'espère) que j'ignore encore du javascript.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 128
    Points : 210
    Points
    210
    Par défaut
    merci

  10. #10
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    On a le Chuck Norris du JavaScript avec nous

    Juste une question TheGwy : quand tu dis « les clés numériques sont castées en Double », ça veut dire qu'elles sont castées en Number ?
    Je viens de faire quelques tests et il me semble que les tableaux accordent un rôle particulier aux entiers, malgré que JS ne fait pas la distinction entre les entiers et les flottants.
    Démonstration :
    Code console : 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 a = []
    []
    >>> a[0] = 0
    0
    >>> a['1'] = '1'
    "1"
    >>> a[2.0] = 2.0
    2.0
    >>> a['3.0'] = '3.0'
    "3.0"
    >>> a[4.5] = 4.5
    3.5
    >>> a['5.5'] = '5.5'
    "5.5"
    >>> a
    [0, "1", 2]
    Le 0, le '1' et le 2 sont passés. Je m'attendais à ce que le '3.0' passe aussi, mais apparemment il est resté à l'état de chaîne. Si je fais a['3.0'], je récupère bien la valeur '3.0'.
    C'est d'autant plus troublant que '3.0' == 3 renvoie true De toute évidence, les clés ne sont pas castées en Double

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Bonjour

    Tout d'abord merci pour ce petit cours trés intéressant sur les tableaux.

    Serait il possible de m'aiguiller sur une solution annexe à la mienne qui ne m'obligerait pas a parccourrir tout le tableau pour afficher tous les membres d'une famille.

    D'avance merci

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 128
    Points : 210
    Points
    210
    Par défaut
    Citation Envoyé par Watilin Voir le message
    On a le Chuck Norris du JavaScript avec nous

    Juste une question TheGwy : quand tu dis « les clés numériques sont castées en Double », ça veut dire qu'elles sont castées en Number ?
    Oui en Javascript il n'y a qu'un seul type numérique Number, qui correspond à un Double de 64 bits, j'utilise les deux termes de manière équivalente.

    Citation Envoyé par Watilin Voir le message
    Je viens de faire quelques tests et il me semble que les tableaux accordent un rôle particulier aux entiers, malgré que JS ne fait pas la distinction entre les entiers et les flottants. [...] De toute évidence, les clés ne sont pas castées en Double
    Tu as tout à fait raison et je n'avais jamais remarqué cette subtilité.
    Les indexs de tableaux ne sont pas castés en Double mais en uint32 (ce qui a bien plus de sens) :

    Norme ecma 262-3
    15.4 Array Objects

    Array objects give special treatment to a certain class of property names. A property name P (in the form of
    a string value) is an array index if and only if ToString(ToUint32(P)) is equal to P
    http://www.ecma-international.org/pu...ber%201999.pdf

    Attention cela reste un type numérique qui n'est manipulable que par le moteur en interne, cela ne veut pas dire qu'il existe de vrais entiers en Javascript, seulement des Double.

    Dans le même genre tu as un topic auquel j'ai répondu juste en dessous avec un problème similaire (shift binaire qui nécessite une conversion implicite et temporaire vers un int signé de 32 bits : http://www.developpez.net/forums/d11...ation-binaire/)

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 128
    Points : 210
    Points
    210
    Par défaut
    Citation Envoyé par solenseb Voir le message
    Bonjour

    Tout d'abord merci pour ce petit cours trés intéressant sur les tableaux.

    Serait il possible de m'aiguiller sur une solution annexe à la mienne qui ne m'obligerait pas a parccourrir tout le tableau pour afficher tous les membres d'une famille.

    D'avance merci
    Comme l'a dit SpaceFrog plus haut (mais avec le mauvais terme) il faut que tu utilise des Objets plutôt que des tableaux.
    Les objets au lieux d'avoir des indexs qui s'itèrent de manière séquentiels, ont des clés bien plus pratiques pour un accès aléatoire.

    Cela te donnerait une structure du genre :

    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
     
    var vilages = {
      "saint-jean-les-bains" : {
        "ledoux" : [
           {"prenom": "marc", "age": 32},
           {"prenom": "marie", "age": 30},
           {"prenom": "luca", "age": 8}
        ],
        "lepic" : [
           {"prenom": "jacques", "age": 88},
           {"prenom": "bernadette", "age": 76}
        ]
      },
      "marsoullin-du-gros" : {
        "dupont" : [
           {"prenom": "jean", "age": 58},
           {"prenom": "josette", "age": 50}
        ]
      }
    }
    Tu pourrais donc acceder à tes données ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    villages[nomVillage][nomFamille]

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup je vais tester avec cela

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. question sur les tableaux
    Par scolopendra dans le forum Langage
    Réponses: 4
    Dernier message: 12/06/2007, 15h15
  2. Question sur les tableaux
    Par Chii-san dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/03/2007, 11h48
  3. Réponses: 9
    Dernier message: 13/06/2006, 21h52
  4. [Tableaux] Question sur les tableaux
    Par Shandler dans le forum Langage
    Réponses: 16
    Dernier message: 21/04/2006, 00h15
  5. question sur les tableaux
    Par Neko dans le forum C++
    Réponses: 13
    Dernier message: 14/02/2006, 02h21

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