J'essaie de passer à un tableau à deux dimensions sans le gâcher. Mon tableau est actuellement:
var myArray = [
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1]
]
Et mon code que j'essaye est:
var r = 3; //start from rows 3
var c = 5; //start from col 5
var rows = 8;
var cols = 7;
for (var i = r; i < rows; i++)
{
for (var j = c; j < cols; j++)
{
myArray[i][j].Push(0);
}
}
Cela devrait aboutir à ce qui suit:
var myArray = [
[1,1,1,1,1,0,0],
[1,1,1,1,1,0,0],
[1,1,1,1,1,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
]
Mais ce n'est pas le cas et je ne suis pas sûr que ce soit la bonne façon de le faire ou non.
La question est donc: comment pourrais-je accomplir cela?
Vous avez des erreurs dans votre code:
myArray[i].Push( 0 );
pour ajouter une nouvelle colonne. Votre code (myArray[i][j].Push(0);
) fonctionnerait dans un tableau à 3 dimensions, car il essaye d'ajouter un autre élément à un tableau à la position [i][j]
.Une version correcte, bien que de nature verbeuse, serait la suivante:
var r = 3; //start from rows 3
var rows = 8;
var cols = 7;
// expand to have the correct amount or rows
for( var i=r; i<rows; i++ ) {
myArray.Push( [] );
}
// expand all rows to have the correct amount of cols
for (var i = 0; i < rows; i++)
{
for (var j = myArray[i].length; j < cols; j++)
{
myArray[i].Push(0);
}
}
Itérer sur deux dimensions signifie que vous devrez vérifier deux dimensions.
en supposant que vous commenciez avec:
var myArray = [
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1]
]; //don't forget your semi-colons
Vous souhaitez développer ce tableau à deux dimensions pour devenir:
var myArray = [
[1,1,1,1,1,0,0],
[1,1,1,1,1,0,0],
[1,1,1,1,1,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
];
Ce qui signifie que vous devez comprendre quelle est la différence.
Commencez avec le tableau extérieur:
var myArray = [
[...],
[...],
[...]
];
Si vous voulez agrandir ce tableau, vous devez vérifier que sa longueur est correcte et ajouter plus de tableaux intérieurs pour compenser la différence:
var i,
rows,
myArray;
rows = 8;
myArray = [...]; //see first example above
for (i = 0; i < rows; i += 1) {
//check if the index exists in the outer array
if (!(i in myArray)) {
//if it doesn't exist, we need another array to fill
myArray.Push([]);
}
}
L'étape suivante nécessite une itération sur chaque colonne de chaque tableau. Nous allons construire sur le code d'origine:
var i,
j,
row,
rows,
cols,
myArray;
rows = 8;
cols = 7; //adding columns in this time
myArray = [...]; //see first example above
for (i = 0; i < rows; i += 1) {
//check if the index exists in the outer array (row)
if (!(i in myArray)) {
//if it doesn't exist, we need another array to fill
myArray[i] = [];
}
row = myArray[i];
for (j = 0; j < cols; j += 1) {
//check if the index exists in the inner array (column)
if (!(i in row)) {
//if it doesn't exist, we need to fill it with `0`
row[j] = 0;
}
}
}
Vous devez parcourir toutes les lignes et ajouter les lignes et les colonnes manquantes. Pour les lignes déjà existantes, vous passez en boucle de c en colonnes, pour les nouvelles lignes, commencez par placer un tableau vide dans un tableau extérieur, puis en boucle de 0 à cols:
var r = 3; //start from rows 3
var c = 5; //start from col 5
var rows = 8;
var cols = 7;
for (var i = 0; i < rows; i++) {
var start;
if (i < r) {
start = c;
} else {
start = 0;
myArray.Push([]);
}
for (var j = start; j < cols; j++) {
myArray[i].Push(0);
}
}
Dans votre cas, vous pouvez le faire sans utiliser Push
:
var myArray = [
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1]
]
var newRows = 8;
var newCols = 7;
var item;
for (var i = 0; i < newRows; i++) {
item = myArray[i] || (myArray[i] = []);
for (var k = item.length; k < newCols; k++)
item[k] = 0;
}
var r = 3; //start from rows 3
var c = 5; //start from col 5
var rows = 8;
var cols = 7;
for (var i = 0; i < rows; i++)
{
for (var j = 0; j < cols; j++)
{
if(j <= c && i <= r) {
myArray[i][j] = 1;
} else {
myArray[i][j] = 0;
}
}
}
Créez un tableau et placez-le dans le premier. Dans ce cas, je récupère les données de la réponse JSON.
$.getJSON('/Tool/GetAllActiviesStatus/',
var dataFC = new Array();
function (data) {
for (var i = 0; i < data.Result.length; i++) {
var serie = new Array(data.Result[i].FUNCAO, data.Result[i].QT, true, true);
dataFC.Push(serie);
});
vous appelez le Push () sur un élément de tableau (int), où Push () doit être appelé sur le tableau; manipuler/remplir le tableau de cette façon n'a aucun sens, vous pouvez le faire comme ceci
for (var i = 0; i < rows - 1; i++)
{
for (var j = c; j < cols; j++)
{
myArray[i].Push(0);
}
}
for (var i = r; i < rows - 1; i++)
{
for (var j = 0; j < cols; j++)
{
col.Push(0);
}
}
vous pouvez également combiner les deux boucles en utilisant une condition if, if row <r, sinon if row> = r