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 :

Créer un tableau 2D grace à deux boucles for


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut Créer un tableau 2D grace à deux boucles for
    Bonjour,
    je me souviens plus comment on fait pour créer un tableau 2D en utilisant deux Boucles for, car je veux le remplir d'une valeur unique dans chaque case lors de sa création.

    je voulais aussi que les max colonne et ligne soient donnés en parametres à la fonction.

    Je sais qu'il faut créer un tableau pour chaque ligne puis un tableau pour chaque colonne il me semble.
    Mais je voulais donner un nom à ce tableau et que la fonction donne par return le tableau 2D.

    Plusieurs pages sur google n'ont pas pu me renseigner.

  2. #2
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Pour un tableau deux D
    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
    //exemple de tableau deux D (4x4)
        let mat=new Array(4);
        //remplissage des éléments de la matrice :
        let val=-1;
        for (let i=0; i<=3;i++){
            mat[i]=new Array(4);
     
            for (let j = 0; j<=3; j++){
                val++;
                mat[i][j] =val ;
            }
        }
        console.log(mat[0][0]);  //0
        console.log(mat[0][1]);  //1
        console.log(mat[1][0]);  //4
        console.log(mat[3][3]);  //15

  3. #3
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    Génial ! c'est ce que je cherchais !
    Me reste plus qu'à l'adapter

    EDIT : SUPER !

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function Surf2D(colonne,ligne){
        var surface=[ligne];   // <---- Corrigé 
        for(lig=0;lig<ligne;lig++){
            surface[lig]=[ligne];
            for(col=0;col<colonne;col++){
                surface[lig][col]=0;
            }
    
        }
        return surface;
    }


    Résultat en faisant console.log(Surf2D):
    (4) [Array(3), Array(3), Array(3), Array(3)]
    0
    :
    (3) [0, 0, 0]
    1
    :
    (3) [0, 0, 0]
    2
    :
    (3) [0, 0, 0]
    3
    :
    (3) [0, 0, 0]
    length
    :
    4

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 988
    Par défaut
    Tu peux te passer de boucles en indiquant la taille à la création de l'objet Array puis en utilisant la méthode Array.prototype.fill pour le remplir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // un tableau 8x4 remplit avec des 3
    let myArr = new Array(8).fill(new Array(4).fill(3));
    Mieux encore, si ton tableau 2d ne doit contenir que des entiers positifs entre 0 et 255, tu peux remplacer les objets Array contenus par des objets Uint8Array (qui prennent moins de place en mémoire et qui ont le bon goût de s'initialiser à 0 d'eux mêmes):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let myArr = new Array(8).fill(new Uint8Array(4));
    ps: ton précédent code est faux, regarde attentivement ce qu'a proposé Archimède. Autre chose, let, const et var, bref, les déclarations, c'est pas juste pour la déco.

    https://developer.mozilla.org/fr/doc...ed_collections

  5. #5
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    Merci !
    c'est génial cette méthode, court et pratique.
    Je peux être amené à mettre un chiffre négatif dans une case, est-ce qu'il existe la même chose acceptant les négatifs ?

    C'est mon code dont tu parlais en disant qu'il était faux ? Il fonctionne bien pourtant et pas d'erreurs sur la console js.

    Je vais me renseigner sur les uint array

    EDIT : aah j'ai compris, à cause de surface qui n'a pas de "let" :/

    Si je met un let est-ce que le return renverra surface ?

    Pour le moment j'ai mis "var surface="

    Merci pour le lien MDN !

    Je viens de voir qu'il y a une autre erreur à la première ligne "surface="
    le tableau est déclaré comme contenant une valeur "ligne" alors qu'il devrait être déclaré comme un tableau de longueur "ligne".
    La correction est : var surface= Array(ligne);.

    Mais avec ce code, la console ne me montre pas les valeurs contenues:

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function Surf2D(colonne,ligne){
        var surface=Array(ligne);    
        for(lig=0;lig<ligne;lig++){
            surface[lig]=Array(ligne);
            for(col=0;col<colonne;col++){
                surface[lig][col]=0;
            }
     
        }
        return surface;
    }


    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Resultat console du return :
     
    ƒ Surf2D(colonne,ligne){
        var surface=Array(ligne);    
        for(lig=0;lig<ligne;lig++){
            surface[lig]=Array(ligne);
            for(col=0;col<colonne;col++){
                surface[lig][col]=0;…


    Par contre ta méthode rapide fonctionne bien et montre les valeurs dans la console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let my = new Array(4).fill(new Array(6).fill(0));
     
    console.log(my);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Array(4)
    0 : (6) [0, 0, 0, 0, 0, 0]
    1 : (6) [0, 0, 0, 0, 0, 0]
    2 : (6) [0, 0, 0, 0, 0, 0]
    3 : (6) [0, 0, 0, 0, 0, 0]
     
    length : 4

  6. #6
    Membre chevronné Avatar de 01001111
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 319
    Par défaut
    Salut Nouby,
    c'est normal que tu aies une fonction en retour si tu fais un console.log directement sur la fonction sans l'évaluer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function test() {
         return 'ok';
    }
    console.log(test); // f { return 'ok' }
    console.log(test()); // ok

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    visiblement tu n'a pas tiré d'enseignement de la discussion : Créer un tableau 2D en se servant de width et height dans un objet

  8. #8
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    Bonjour,
    visiblement tu n'a pas tiré d'enseignement de la discussion : Créer un tableau 2D en se servant de width et height dans un objet
    Si si j'avais bien noté mais c'était lorsque je bossais sur l'objet, et comme j'ai arreté de bosser sur l'objet pour faire autre chose je ne l'ai pas encore appliqué, et le sujet sur lequel je codais actuellement c'était une surface 2D que je voulais remplir lors de sa création et je ne savais pas comment faire à partir de l'exemple que tu m'avais donné, bel exemple par ailleurs, et sur google plusieurs sites proposent aussi de faire un tableau 2D mais sans possibilité de l'initialiser lors de sa création, donc j'ai repensé à cette méthode des deux boucles "for" mais comme tu vois on m'a proposé mieux que ces boucles
    N'empêche j'ai bien appris grace à toutes vos solutions !

  9. #9
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    Citation Envoyé par 01001111 Voir le message
    Salut Nouby,
    c'est normal que tu aies une fonction en retour si tu fais un console.log directement sur la fonction sans l'évaluer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function test() {
         return 'ok';
    }
    console.log(test); // f { return 'ok' }
    console.log(test()); // ok
    Salut et Merci

    cela veut dire quoi, Evaluer la fonction ? Je comprend pas, même avec l'exemple :/

    EDIT : Aaaaah je vois, il fallait les parenthèses avec le nom de fonction pour quelle s'execute, OK

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

Discussions similaires

  1. Deux boucles for + un effet de bord ?
    Par Teufboy dans le forum Langage
    Réponses: 2
    Dernier message: 21/12/2007, 08h08
  2. Réponses: 3
    Dernier message: 24/05/2007, 17h56
  3. Réponses: 9
    Dernier message: 15/09/2006, 19h08
  4. Batch - Deux boucle For imbriquées plus un FC
    Par Lorponos dans le forum Windows
    Réponses: 17
    Dernier message: 27/07/2006, 14h58
  5. comment quitter deux boucles for?
    Par davmaster62 dans le forum Général Python
    Réponses: 2
    Dernier message: 08/03/2006, 00h16

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