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
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 ]
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"
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));
Vous pouvez imbriquer un tableau dans un autre en utilisant la syntaxe abrégée:
var twoDee = [[]];
Vous pouvez essayer quelque chose comme ça: -
var arr = new Array([]);
Données Push:
arr[0][0] = 'abc xyz';
Un tableau vide est défini en omettant des valeurs, comme ceci:
v=[[],[]]
a=[]
b=[1,2]
a.Push(b)
b==a[0]
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>
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);
}
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"
// pour tableau 3 x 5
new Array(3).fill(new Array(5).fill(0))
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)));