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

117voto

dg123 Points 2283

Vous pouvez simplement déclarer un tableau ordinaire comme ceci :

var arry = [];

Ensuite, lorsque vous avez une paire de valeurs à ajouter au tableau, tout ce que vous devez faire est :

arry.push([value_1, value2]);

Et oui, la première fois que vous appelez arry.push la paire de valeurs sera placée à l'indice 0.

A partir du nodejs repl :

> var arry = [];
undefined
> arry.push([1,2]);
1
> arry
[ [ 1, 2 ] ]
> arry.push([2,3]);
2
> arry
[ [ 1, 2 ], [ 2, 3 ] ]

Bien sûr, puisque javascript est typée dynamiquement, il n'y aura pas de vérificateur de type pour imposer que le tableau reste à 2 dimensions. Vous devrez vous assurer de n'ajouter que des paires de coordonnées et de ne pas faire ce qui suit :

> arry.push(100);
3
> arry
[ [ 1, 2 ],
  [ 2, 3 ],
  100 ]

113voto

AbhinavD Points 1641

Si vous voulez initialiser en même temps que la création, vous pouvez utiliser remplir y carte .

const matrix = new Array(5).fill(0).map(() => new Array(4).fill(0));

5 est le nombre de lignes et 4 le nombre de colonnes.

78voto

Kamil Kiełczewski Points 6496

ES6

Matrice m avec une taille de 3 lignes et 5 colonnes (supprimer .fill(0) pour ne pas être init par zéro)

[...Array(3)].map(x=>Array(5).fill(0))       

let Array2D = (r,c) => [...Array(r)].map(x=>Array(c).fill(0));

let m = Array2D(3,5);

m[1][0] = 2;  // second row, first column
m[2][4] = 8;  // last row, last column

// print formated array
console.log(JSON.stringify(m)
  .replace(/(\[\[)(.*)(\]\])/g,'[\n  [$2]\n]').replace(/],/g,'],\n  ')
);

38voto

Lorenzo Gangi Points 356

Si vous voulez pouvoir accéder à la matrice comme ceci :

matrix[i][j]

Je trouve que c'est plus pratique de le mettre en boucle.

var matrix = [],
    cols = 3;

//init the grid matrix
for ( var i = 0; i < cols; i++ ) {
    matrix[i] = []; 
}

Cela vous donnera

[ [], [], [] ]

donc

matrix[0][0]
matrix[1][0]

renvoie à undefined et non l'erreur "Uncaught TypeError : Cannot set property '0' of undefined".

18voto

Kevin Bowersox Points 48223

Vous pouvez imbriquer un tableau dans un autre en utilisant la syntaxe abrégée :

   var twoDee = [[]];

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