125 votes

Déclarer un tableau bidimensionnel vide en Javascript ?

Je veux créer un tableau à deux dimensions en Javascript où je vais stocker les coordonnées (x,y). Je ne sais pas encore combien de paires de coordonnées j'aurai car elles seront générées dynamiquement par l'entrée de l'utilisateur.

Exemple de tableau 2d prédéfini :

var Arr=[[1,2],[3,4],[5,6]];

Je suppose que je peux utiliser la méthode PUSH pour ajouter un nouvel enregistrement à la fin du tableau.

Comment puis-je déclarer un tableau vide à deux dimensions de sorte que lorsque j'utilise mon premier Arr.push(), il sera ajouté à l'index 0, et chaque enregistrement suivant écrit par push prendra l'index suivant ?

C'est probablement très facile à faire, je ne suis qu'un novice en matière de JS, et j'apprécierais si quelqu'un pouvait écrire un court extrait de code fonctionnel que je pourrais examiner. Merci

0voto

Gyan Satapathy Points 1

Pas besoin de se donner tant de mal ! C'est simple

Cela créera une matrice 2 * 3 de la chaîne.

var array=[];
var x = 2, y = 3;
var s = 'abcdefg';

for(var i = 0; i<x; i++){
    array[i]=new Array();
      for(var j = 0; j<y; j++){
         array[i].push(s.charAt(counter++));
        }
    }

-2voto

GMC Points 1

Nous connaissons généralement le nombre de colonnes mais peut-être pas le nombre de lignes (enregistrements). Voici un exemple de ma solution qui utilise une grande partie de ce qui précède. (Pour ceux qui ont plus d'expérience en JS que moi - à peu près tout le monde - toute suggestion d'amélioration du code est la bienvenue).

     var a_cols = [null,null,null,null,null,null,null,null,null];
     var a_rxc  = [[a_cols]];

     // just checking  var arr =  a_rxc.length ; //Array.isArray(a_rxc);
     // alert ("a_rxc length=" + arr) ; Returned 1 
     /* Quick test of array to check can assign new rows to a_rxc. 
        i can be treated as the rows dimension and  j the columns*/
       for (i=0; i<3; i++) {
          for (j=0; j<9; j++) {
            a_rxc[i][j] = i*j;
            alert ("i=" + i + "j=" + j + "  "  + a_rxc[i][j] );
           }
          if (i+1<3) { a_rxc[i+1] = [[a_cols]]; }
        }

Et si l'on passe ce tableau au serveur, l'ajax qui fonctionne pour moi est le suivant

 $.post("../ajax/myservercode.php",
       {
        jqArrArg1 : a_onedimarray,
        jqArrArg2 : a_rxc
       },
       function(){  },"text" )
        .done(function(srvresp,status) { $("#id_PageContainer").html(srvresp);} ) 
        .fail(function(jqXHR,status) { alert("jqXHR AJAX error " + jqXHR + ">>" + status );} );

-2voto

MadHaka Points 23

Quel est le problème avec

var arr2 = new Array(10,20);
    arr2[0,0] = 5;
    arr2[0,1] = 2
    console.log("sum is   " + (arr2[0,0] +  arr2[0,1]))

devrait lire "la somme est 7"

-3voto

Gabe Rubio Points 1

Vous pouvez imbriquer un nouveau tableau au fur et à mesure que vous remplissez le premier :

let ROWS = 2,
    COLS = 6;
let arr = new Array(ROWS).fill(new Array(COLS).fill(-1));

Output:
arr = 
[
  [-1, -1, -1, -1, -1, -1],
  [-1, -1, -1, -1, -1, -1]
]

Si vous êtes confus, décomposons cela en déclarant/remplissant un tableau : Créez un nouveau tableau de taille d, rempli avec une valeur initiale quelconque.

let arr1d = new Array(d).fill(<whatever_fill_val>);

Maintenant, au lieu de remplir votre premier tableau avec un int/string/etc, vous pouvez le remplir avec un AUTRE tableau, comme vous remplissez le tableau imbriqué !

let arr = new Array(d).fill(new Array(n).fill(-1));

-6voto

leannez Points 31

// pour un tableau de 3 x 5

new Array(3).fill(new Array(5).fill(0))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X