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 :

Double array d'objets


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    IRIS, ATS, 3IL Rodez
    Inscrit en
    Juin 2014
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : IRIS, ATS, 3IL Rodez

    Informations forums :
    Inscription : Juin 2014
    Messages : 27
    Par d�faut Double array d'objets
    Bonjour,


    Je d�couvre le Js depuis quelque jours, et �tant familier du c/c++ j'avoue �tre tr�s surpris de l'approche de ce langage ! ()


    J'aimerais cr�er un b�te tableau � deux dimensions d'objets pr�d�finis, mais je m'embrouille avec ces histoires d'objets proto-typ�s et tout la logique qui va avec...

    En gros j'ai l'impression qu'il me faudrait cr�er un array, puis le remplir d'array, puis dans chaque array initialiser avec new mon objet pr�d�finis, quelle lourdeur !

    Mon constructeur ressemble � :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    function Tile(P_position_x, P_position_y){
     
       this.D_position_x = P_position_x;
       this.D_position_y = P_position_y;
     
       }
    S'il s'agissait d'une "classe", en C il "me suffirait" d'un simple Tile Grille[largeur][longueur];

    En Js, je n'arrive pas � �crire mieux que �a... :

    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
    var tableau = new Array(5);
     
    function Tile(P_position_x, P_position_y){
     
      this.D_position_x = P_position_x;
      this.D_position_y = P_position_y;
     
    }
     
    for (var i = 0; i < 5; i++) {
      tableau[i] = new Array(5);
      for (var u = 0; u < 5; u++) {
        tableau[i][u] = new Tile(4,2) ;
      }
    }
    alert(tableau[0][3].D_position_x+""+tableau[2][4].D_position_y); // affiche 42
    alert(tableau[4][2].D_position_x+""+tableau[4][2].D_position_y); // affiche 42
    Bref, autant dire que j'aimerais savoir s'il n'y a pas plus simple (et juste...) pour r�pondre � un besoin aussi primaire !

    Si vous aviez une piste, je vous en remercierais grandement ! Tous les tutos fr�quent�s (sdz, mozilla, devellopez...) n'ont r�ussi qu'� m'embrouiller

    Bonne journ�e � vous !

  2. #2
    R�dacteur

    Avatar de danielhagnoul
    Homme Profil pro
    �tudiant perp�tuel
    Inscrit en
    F�vrier 2009
    Messages
    6 389
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant perp�tuel
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par d�faut
    C'est un autre langage, donc des moyens diff�rents et des possibilit�s diff�rentes.

    En utilisant ES2015, le JS d'aujourd'hui :

    Code JavaScript : 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 Tile( P_position_x, P_position_y ){
      this.D_position_x = P_position_x;
      this.D_position_y = P_position_y;
    }
     
    const
      longueur = 5,
      tableau = new Array( longueur );
     
    // initialisation du tableau
    tableau.fill( new Array( longueur ) );
     
    for ( let item of tableau ){
      item.fill( new Tile( 4, 2 ) );
    }
     
    // debug, console, touche F12
    for ( let item of tableau ){
      for ( let jtem of item ){
        console.log( jtem );
      }
    }
     
    // votre test
    console.log( tableau[0][3].D_position_x + "" + tableau[2][4].D_position_y ); // affiche 42
    console.log( tableau[4][2].D_position_x + "" + tableau[4][2].D_position_y ); // affiche 42

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues � un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre averti
    Homme Profil pro
    IRIS, ATS, 3IL Rodez
    Inscrit en
    Juin 2014
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : IRIS, ATS, 3IL Rodez

    Informations forums :
    Inscription : Juin 2014
    Messages : 27
    Par d�faut
    Salut !

    Merci ! Une r�ponse au top ! Je vais regarder tout �a de plus pr�s...

    Bonne journ�e � toi, et merci encore !

  4. #4
    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
    Par d�faut
    Je pr�cise, puisque vous d�butez en JS, que la norme ES2015 utilis�e dans le code de Daniel n'est pas bien support�e par les navigateurs anciens comme IE. Attention si vous avez des contraintes de support

  5. #5
    Membre averti
    Homme Profil pro
    IRIS, ATS, 3IL Rodez
    Inscrit en
    Juin 2014
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : IRIS, ATS, 3IL Rodez

    Informations forums :
    Inscription : Juin 2014
    Messages : 27
    Par d�faut
    Merci bien

    C'est not� ! De toute fa�on depuis que j'ai commenc�... c'est toujours IE qui finit en par �tre point� du doigt dans les tutos... Je commence a anticiper le truc !

    En tout cas le coup des let/const � l'air d'�tre assez majeur comme �volution, merci pour l'info !

    Bonne soir�e !

  6. #6
    R�dacteur

    Avatar de danielhagnoul
    Homme Profil pro
    �tudiant perp�tuel
    Inscrit en
    F�vrier 2009
    Messages
    6 389
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant perp�tuel
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par d�faut
    EDIT :
    Citation Envoy� par https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/fill
    La m�thode fill() remplit tout les �l�ments d'un tableau entre deux index avec une valeur statique.
    Il est normal que cela ne fonctionne pas pour un objet, car il affecte le m�me objet � chaque cellule du tableau. Il est impossible de faire tableau.fill( new Array( longueur ) );.

    Voir : http://www.developpez.net/forums/d16...s/#post8750629

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues � un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    R�dacteur

    Avatar de danielhagnoul
    Homme Profil pro
    �tudiant perp�tuel
    Inscrit en
    F�vrier 2009
    Messages
    6 389
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant perp�tuel
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par d�faut
    La m�thode fill ne peut prendre qu'une valeur statique, mais on peut construire et initialiser un tableau simple ou un tableau � deux dimensions avec Array.from(arrayLike[, fonctionMap[, thisArg]]).

    Voir : https://developer.mozilla.org/fr/doc...aux/Array/from
    Et : http://exploringjs.com/es6/ch_arrays.html#Array_from

    Exemple :

    Code JavaScript : 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
    function Cellule( actif, age, abouge ){
      this.actif = actif;
      this.age = age;
      this.abouge = abouge;
    }
     
    const
      longueur = 20,
      tableau = Array.from( new Array( longueur ), () => Array.from( new Array( longueur ), () => new Cellule( false, 0, false ) ) );
     
    // test
    tableau[1][1].age = 66;
    tableau[5][5].actif = true;
    tableau[15][3].abouge = true;
     
    // debug, console, touche F12
    for ( let [ i, item ] of tableau.entries() ){
      for ( let [ j, jtem ] of item.entries() ){
        console.log( `[ ${i}, ${j} ] : actif = ${ jtem.actif }, age = ${ jtem.age }, abouge = ${ jtem.abouge }` );
      }
    }

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues � un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  8. #8
    Membre averti
    Homme Profil pro
    IRIS, ATS, 3IL Rodez
    Inscrit en
    Juin 2014
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : IRIS, ATS, 3IL Rodez

    Informations forums :
    Inscription : Juin 2014
    Messages : 27
    Par d�faut merci
    Merci encore Daniel ! Heuresement que tu es l� !

    Je suis tomb� exactement sur le m�me probl�me peu apr�s avoir lu ta r�ponse sur mon sujet pr�c�dent !

    Je modifiais mon tableau d'objet(S?!) en utilisant "tableau[x][y].blablabla]" sans me rendre compte qu'il s'agissait du m�me objet...

    Je commence � trouver �a un peu tir� par les cheveux de devoir �crire pour un tableau a 2D d'objets :
    const
    longueur = 5,
    tableau = Array.from( new Array( longueur ), () => Array.from( new Array( longueur ), () => new Cellule( false, 0, false ) ) );



    On est loin de ce qu'on pourrait imaginer innocemment en attaquant le Js... Je m'attendais un langage beaucoup plus "friendly".
    Comment ce fait-il que se soit aussi contre intuitif ?! Myst�re !

    Bon code � vous !

  9. #9
    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
    Par d�faut
    Int�ressant le coup du Array.from, perso j'ai l'habitude de passer par un fill().map():
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    const tableau = Array(longueur).fill().map(() => Array(longueur).fill().map(() => new Cellule( false, 0, false ) ))
    Ce n'est pas le plus intuitif parce qu'on cherche une solution en une seule ligne avec un style fonctionnel. Une approche plus "user-friendly/d�butant" serait d'utiliser deux boucles for comme tu l'as fait au d�part:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var tableau = [];
    for(var i=0; i<longueur; i++){
       tableau[i] = [];
       for(var j=0; j<longueur; j++){
         tableau[i][j] = new Cellule(false, 0, false);
      }
    }
    C'est encore ce qu'il y a de plus clair

  10. #10
    Membre tr�s actif
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    744
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 80
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activit� : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 744
    Par d�faut
    Une approche plus "user-friendly/d�butant"
    le mot d�butant est un peut fort.

    Dans plus ou moins le m�me sens au lieux de dire abeille on devrait dire Anthophila

    quand j'ai commenc� a apprendre javascript en voyant ce genre de syntaxe j'aurais fuis a toutes jambes

  11. #11
    R�dacteur

    Avatar de danielhagnoul
    Homme Profil pro
    �tudiant perp�tuel
    Inscrit en
    F�vrier 2009
    Messages
    6 389
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant perp�tuel
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par d�faut
    Citation Envoy� par Ragoudcep Voir le message
    Je commence � trouver �a un peu tir� par les cheveux de devoir �crire pour un tableau a 2D d'objets :
    Code JavaScript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    const
          longueur = 5,
          tableau = Array.from( new Array( longueur ), () => Array.from( new Array( longueur ), () => new Cellule( false, 0, false ) ) );
    C'est peut-�tre la notation arrow qui vous fait para�tre la chose complexe. Lorsqu'on l'utilise tous les jours, on trouve au contraire qu'elle simplifie les codes.

    Version avec () => :

    let tableau = Array.from( new Array( longueur ), () => Array.from( new Array( longueur ), () => new Cellule( false, 0, false ) ) );.

    Version avec function :

    Code JavaScript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    let tableau = Array.from( new Array( longueur ), 
      function(){
        return Array.from( new Array( longueur ), 
          function(){
            return new Cellule( false, 0, false )
          }
        )
      }
    );

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues � un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. cell array --> double array ?
    Par Truth dans le forum MATLAB
    R�ponses: 2
    Dernier message: 06/04/2008, 14h24
  2. [Tableaux] Classer un array d'objets
    Par Linio dans le forum Langage
    R�ponses: 4
    Dernier message: 27/11/2007, 17h24
  3. D�clarer un Array d'Objet?
    Par lekunfry dans le forum Flex
    R�ponses: 1
    Dernier message: 26/11/2007, 01h59
  4. wxWidgets d�finir un array d'objets
    Par reptils dans le forum wxWidgets
    R�ponses: 1
    Dernier message: 26/07/2006, 16h00
  5. [Reflect] Cr�er un array d'objets avec le nom de leur classe
    Par Onarap dans le forum API standards et tierces
    R�ponses: 18
    Dernier message: 12/06/2006, 12h24

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