1380 votes

Comment créer un tableau à deux dimensions en JavaScript ?

J'ai lu sur Internet et certains sites affirment que ce n'est pas possible, d'autres disent que si et donnent un exemple, d'autres encore réfutent cet exemple, etc.

  1. Comment déclarer un tableau à 2 dimensions en JavaScript ? (en supposant que ce soit possible)

  2. Comment puis-je accéder à ses membres ? ( myArray[0][1] ou myArray[0,1] ?)

26 votes

En supposant une définition quelque peu pédante, il est techniquement impossible de créer un tableau 2d en javascript. Mais vous pouvez créer un tableau de tableaux, ce qui revient au même.

0 votes

0 votes

Pour un tableau 2D 5x3, je ferais comme suit var arr2D = new Array(5).fill(new Array(3)); De plus, si vous ne voulez pas que les cellules soient "indéfinies", vous pouvez faire comme suit var arr2D = new Array(5).fill(new Array(3).fill("hey"));

1416voto

Ballsacian1 Points 6571
var items = [
  [1, 2],
  [3, 4],
  [5, 6]
];
console.log(items[0][0]); // 1
console.log(items[0][1]); // 2
console.log(items[1][0]); // 3
console.log(items[1][1]); // 4
console.log(items);

44 votes

Il serait difficile d'initialiser un grand tableau multidimensionnel de cette manière. Cependant, cette fonction peut être utilisé pour créer une multidimensionnelle vide, avec les dimensions spécifiées en tant que paramètres.

5 votes

@AndersonGreen C'est une bonne chose que vous ayez mentionné un lien pour ceux qui sont intéressés par la solution du réseau multi-D, mais la question et la réponse de Ballsacian1 concernent le réseau "2D", pas le réseau "multi-D".

0 votes

Vous devez passer en revue tout le processus... par exemple alert(items[0][1]) ; // 2 etc.

509voto

Sufian Points 3151

Il suffit de faire de chaque élément du tableau un tableau.

var x = new Array(10);

for (var i = 0; i < x.length; i++) {
  x[i] = new Array(3);
}

console.log(x);

6 votes

Peuvent-ils utiliser des choses comme des chaînes de caractères pour leurs clés et leurs valeurs ? myArray['Book']['item1'] ?

46 votes

@Diego, oui, mais ce n'est pas à cela que servent les tableaux. Il est préférable d'utiliser un objet lorsque vos clés sont des chaînes de caractères.

10 votes

Je préfère cet exemple à la réponse acceptée car il peut être mis en œuvre pour des tableaux de taille dynamique, par exemple. new Array(size) donde size est une variable.

225voto

Matthew Crumley Points 47284

Tout comme la réponse d'Activa, voici une fonction permettant de créer un tableau à n dimensions :

function createArray(length) {
    var arr = new Array(length || 0),
        i = length;

    if (arguments.length > 1) {
        var args = Array.prototype.slice.call(arguments, 1);
        while(i--) arr[length-1 - i] = createArray.apply(this, args);
    }

    return arr;
}

createArray();     // [] or new Array()

createArray(2);    // new Array(2)

createArray(3, 2); // [new Array(2),
                   //  new Array(2),
                   //  new Array(2)]

2 votes

Cela peut-il créer un tableau à 4 dimensions ?

4 votes

@trusktr : Oui, vous pourriez créer autant de dimensions que vous le souhaitez (dans la limite de vos contraintes de mémoire). Il suffit de passer dans la longueur des quatre dimensions. Par exemple, var array = createArray(2, 3, 4, 5); .

0 votes

Joli ! En fait, j'ai posé une question à ce sujet ici : stackoverflow.com/questions/6053332/javascript-4d-arrays et une variété de réponses intéressantes.

98voto

Philippe Leybaert Points 62715

Javascript ne dispose que de tableaux à une dimension, mais vous pouvez construire des tableaux de tableaux, comme d'autres l'ont souligné.

La fonction suivante peut être utilisée pour construire un tableau bidimensionnel de dimensions fixes :

function Create2DArray(rows) {
  var arr = [];

  for (var i=0;i<rows;i++) {
     arr[i] = [];
  }

  return arr;
}

Le nombre de colonnes n'est pas vraiment important, car il n'est pas nécessaire de spécifier la taille d'un tableau avant de l'utiliser.

Alors vous pouvez appeler :

var arr = Create2DArray(100);

arr[50][2] = 5;
arr[70][5] = 7454;
// ...

0 votes

Je veux créer un tableau à deux dimensions qui représente un jeu de cartes. Il s'agirait d'un tableau à deux dimensions contenant la valeur de la carte, puis la couleur. Quel serait le moyen le plus simple de le faire ?

1 votes

Function Create2DArray(rows) { var arr = [] ; for (var i=0;i<rows;i++) { arr[i] = [] ; } return arr ; } function print(deck) { for(t=1;t<=4;t++) { for (i=1;i<=13;i++) { document.writeln(deck[t][i]) ; } } } fucntion fillDeck(d) { for(t=1;t<=4;t++) { myCardDeck[t][1] = t ; for (i=1;i<=13;i++) { myCardDeck[t][i] = i ; } } } function loadCardDeck() { var myCardDeck = Create2DArray(13) ; fillDeck(myCardDeck) ; print(myCardDeck) ; }

2 votes

@Doug : Vous voulez en fait un tableau unidimensionnel d'objets avec 2 attributs. var deck= [] ; deck[0]= { face:1, suit:'H'} ;

47voto

James Conigliaro Points 3173

La raison pour laquelle certains disent que ce n'est pas possible est qu'un tableau à deux dimensions n'est en fait qu'un tableau de tableaux. Les autres commentaires ici fournissent des méthodes parfaitement valables pour créer des tableaux bidimensionnels en JavaScript, mais le point de vue le plus pur serait que vous avez un tableau unidimensionnel d'objets, chacun de ces objets serait un tableau unidimensionnel composé de deux éléments.

C'est donc la cause des points de vue contradictoires.

43 votes

Non, ça ne l'est pas. Dans certains langages, vous pouvez avoir des tableaux multidimensionnels tels que string[3,5] = "foo"; . Il s'agit d'une meilleure approche pour certains scénarios, car l'axe Y n'est pas réellement un enfant de l'axe X.

4 votes

Une fois dans le code machine sous-jacent, tous les tenseurs de dimension > 1 sont des tableaux de tableaux, quel que soit le langage utilisé. Il est utile de garder cela à l'esprit pour des raisons d'optimisation du cache. Tout langage décent qui prend au sérieux le calcul numérique vous permettra d'aligner votre structure multidimensionnelle en mémoire de manière à ce que la dimension la plus utilisée soit stockée de manière contiguë. Numpy de Python, Fortran et C me viennent à l'esprit. Il existe en effet des cas où il est intéressant de réduire la dimensionnalité en plusieurs structures pour cette raison.

0 votes

Les ordinateurs n'ont aucune notion des dimensions. Il n'y a qu'une seule dimension, l'adresse mémoire. Tout le reste n'est que décoration notative au profit du programmeur.

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