web-dev-qa-db-fra.com

Déclarer un tableau vide à deux dimensions 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 je vais avoir car elles seront générées dynamiquement par les entrées 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 déclarer un tableau à deux dimensions vide afin que, lorsque j'utilise mon premier Arr.Push (), il soit ajouté à l'index 0 et que chaque enregistrement suivant écrit par Push utilise l'index suivant?

C’est probablement très facile à faire, je ne suis qu’un débutant avec JS et j’apprécierais que quelqu'un puisse écrire un court extrait de code fonctionnel que je pourrais examiner. Merci

49
Zannix

Vous pouvez simplement déclarer un tableau régulier comme ceci:

var arry = [];

Ensuite, lorsque vous avez une paire de valeurs à ajouter au tableau, il vous suffit de:

arry.Push([value_1, value2]);

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

A partir de la 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 le javascript est typé de manière dynamique, il n’y aura pas de vérificateur de type qui oblige le tableau à rester à 2 dimensions. Assurez-vous d’ajouter uniquement des paires de coordonnées et ne procédez pas comme suit:

> arry.Push(100);
3
> arry
[ [ 1, 2 ],
  [ 2, 3 ],
  100 ]
69
DJG

Si vous voulez pouvoir accéder à la matrice comme si matrice [i] [j]

Je trouve qu'il est le plus pratique de l'initier en boucle.

var matrix = [],
    cols = 3;

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

cela vous donnera [[], [], []]

so matrix [0] [0] matrix [1] [0] renvoie non défini et pas l'erreur "Uncaught TypeError: impossible de définir la propriété '0' de non défini"

20
Lorenzo Gangi

Si vous voulez initialiser avec la création, vous pouvez utiliser remplir et map .

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.

19
AbhinavD

ES6

Matrice m de taille 3 lignes et 5 colonnes

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

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

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

Supprimez .fill(0) pour ne pas initialiser par zéro. Prime

let Array2D = (r,c) => [...Array(r)].map(x=>Array(c).fill(0));
let b = Array2D(5,7);
console.log(JSON.stringify(b));
10
Kamil Kiełczewski

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

   var twoDee = [[]];
6
Kevin Bowersox

Vous pouvez essayer quelque chose comme ça: -

var arr = new Array([]);

Données Push:

arr[0][0] = 'abc xyz';
5
Rahul Tripathi

Un tableau vide est défini en omettant des valeurs, comme ceci:

v=[[],[]]
a=[]
b=[1,2]
a.Push(b)
b==a[0]
4
UIlrvnd

Vous pouvez remplir un tableau avec des tableaux en utilisant une fonction:



var arr = [];
var rows = 11;
var columns = 12;

fill2DimensionsArray(arr, rows, columns);

function fill2DimensionsArray(arr, rows, columns){
    for (var i = 0; i < rows; i++) {
        arr.Push([0])
        for (var j = 0; j < columns; j++) {
            arr[i][j] = 0;
        }
    }
}
 </ code>

Le résultat est:



Array(11)
0:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
1:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
3:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
4:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
5:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
6:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
7:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
8:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
9:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
10:(12)[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
 </ code>

1
entoniperez

Créer un objet et pousser cet objet dans un tableau

 var jSONdataHolder = function(country, lat, lon) {

    this.country = country;
    this.lat = lat;
    this.lon = lon;
}

var jSONholderArr = [];

jSONholderArr.Push(new jSONdataHolder("Sweden", "60", "17"));
jSONholderArr.Push(new jSONdataHolder("Portugal", "38", "9"));
jSONholderArr.Push(new jSONdataHolder("Brazil", "23", "-46"));

var nObj = jSONholderArr.length;
for (var i = 0; i < nObj; i++) {
   console.log(jSONholderArr[i].country + "; " + jSONholderArr[i].lat + "; " + 
   jSONholderArr[i].lon);

}
1
Björn Hallström

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"

1
MadHaka

// pour tableau 3 x 5

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

Si nous n’utilisons pas ES2015 et que nous n’avons pas fill (), utilisez simplement .apply()

Voir https://stackoverflow.com/a/47041157/1851492

let Array2D = (r, c, fill) => Array.apply(null, new Array(r)).map(function() {return Array.apply(null, new Array(c)).map(function() {return fill})})

console.log(JSON.stringify(Array2D(3,4,0)));
console.log(JSON.stringify(Array2D(4,5,1)));
0
allenyllee