J'ai un objet champs avec plusieurs tableaux unidimensionnels écrits en JavaScript. Je veux pouvoir changer des nombres dans l'objet, en cliquant sur un bouton ou quoi que ce soit. Une façon est que je crée un nouvel objet complet, avec juste ce changement. Mais je ne veux pas en créer à chaque fois un tout nouveau.

Alors, comment est-il possible de changer le 11 au milieu de la ligne en un autre nombre? J'ai besoin de ce changement pour mon tilemap.

var fields = [
[2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,0],
[7,1,2,2,7,7,7,7,7,7,7,7,7,3,5,7,0],
[7,7,7,7,7,7,7,1,7,7,7,7,7,7,7,7,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0],
[7,7,3,7,7,7,7,7,0,7,7,7,4,7,0,0,0],
[0,0,0,0,0,7,7,7,0,0,7,7,7,7,7,0,0],
[2,2,2,0,0,7,7,7,0,0,0,7,7,2,2,2,2],
[2,1,2,2,0,7,7,7,7,7,0,2,2,2,2,0,0],
[7,7,2,2,0,0,7,7,11,7,0,0,0,0,0,0,0], // this row i want change the 11
[7,7,7,2,0,7,7,7,7,7,7,7,2,2,0,0,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,0,7,7,0,7,7,7,7,3,7,7,2,2,2,2],
[2,7,0,0,0,0,7,0,7,7,7,7,7,1,2,2,2],
[2,1,7,7,7,0,0,0,7,7,7,7,2,2,2,0,0],
[2,2,2,2,7,0,7,7,7,7,7,2,2,0,0,0,0],
[2,2,2,2,2,2,7,7,7,7,7,2,0,0,0,0,0], 

]
0
user5090322 11 avril 2018 à 22:33

5 réponses

Meilleure réponse
var fields = [
[2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,0],
[7,1,2,2,7,7,7,7,7,7,7,7,7,3,5,7,0],
[7,7,7,7,7,7,7,1,7,7,7,7,7,7,7,7,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0],
[7,7,3,7,7,7,7,7,0,7,7,7,4,7,0,0,0],
[0,0,0,0,0,7,7,7,0,0,7,7,7,7,7,0,0],
[2,2,2,0,0,7,7,7,0,0,0,7,7,2,2,2,2],
[2,1,2,2,0,7,7,7,7,7,0,2,2,2,2,0,0],
[7,7,2,2,0,0,7,7,11,7,0,0,0,0,0,0,0], // this row i want change the 11
[7,7,7,2,0,7,7,7,7,7,7,7,2,2,0,0,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,0,7,7,0,7,7,7,7,3,7,7,2,2,2,2],
[2,7,0,0,0,0,7,0,7,7,7,7,7,1,2,2,2],
[2,1,7,7,7,0,0,0,7,7,7,7,2,2,2,0,0],
[2,2,2,2,7,0,7,7,7,7,7,2,2,0,0,0,0],
[2,2,2,2,2,2,7,7,7,7,7,2,0,0,0,0,0], 
];

function changethe11(){
  fields[8][8] = 32;
  console.log(fields);
}
<button onclick=changethe11()>change the 11</button>
1
I wrestled a bear once. 11 avril 2018 à 19:38

Le problème peut naître si vous voulez changer aussi d'autres nombres ou tous les 11 du tableau ... Le code vers le bas, boucle chaque tableau et trouve le numéro que vous voulez remplacer dans ce cas 11 et après donnez une nouvelle valeur 15, mais il le fait avec tous les 11 dans le tableau multidimensionnel .... Sinon, d'autres vous ont répondu pour remplacer uniquement cette position.Si vous voulez remplacer par exemple tous les 7 par un autre numéro, changez la valeur, numberToReplace = 7 et v [i] = new valeur et ainsi de suite .... Mais vous pouvez également l'amplifier et par exemple, vous pouvez changer tous les 7 dans le deuxième tableau ou le quatrième tableau en ajoutant simplement un if i == 8 dans ce cas, le 8e tableau comme 11 mais vous pouvez remplacer tous les 7 en i = 2 et ainsi de suite .... Au revoir

                var fields = [[2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,0],
                [7,1,2,2,7,7,7,7,7,7,7,7,7,3,5,7,0],
                [7,7,7,7,7,7,7,1,7,7,7,7,7,7,7,7,0],
                [7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0],
                [7,7,3,7,7,7,7,7,0,7,7,7,4,7,0,0,0],
                [0,0,0,0,0,7,7,7,0,0,7,7,7,7,7,0,0],
                [2,2,2,0,0,7,7,7,0,0,0,7,7,2,2,2,2],
                [2,1,2,2,0,7,7,7,7,7,0,2,2,2,2,0,0],
                [7,7,2,2,0,0,7,7,11,7,0,0,0,0,0,0,0], // this row i want change the 11
                [7,7,7,2,0,7,7,7,7,7,7,7,2,2,0,0,0],
                [7,7,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
                [0,0,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
                [0,0,0,7,7,0,7,7,7,7,3,7,7,2,2,2,2],
                [2,7,0,0,0,0,7,0,7,7,7,7,7,1,2,2,2],
                [2,1,7,7,7,0,0,0,7,7,7,7,2,2,2,0,0],
                [2,2,2,2,7,0,7,7,7,7,7,2,2,0,0,0,0],
                [2,2,2,2,2,2,7,7,7,7,7,2,0,0,0,0,0]];

                $.each(fields,function(k,v){
                  //console.log(fields[k]);
                  $.each(v,function(i,j){
                    //console.log(j);
                    numberToReplace = 11;
                    if (j==numberToReplace){
                         v[i]=15;//<--New value 15
                        }
                        });
                     });
                console.log(fields);
0
11 avril 2018 à 20:30

Vous pouvez parcourir un tableau multidimensionnel avec autant de fors que de dimensions.

for(var i = 0; i < fields.length; i++){
    for(var j = 0; j < fields[i].length; j++){
        if(fields[i][j] == 11){
            fields[i][j] = "THE VALUE YOU WANT";
        }
    }
}

Vous pouvez accéder à n'importe quelle position que vous voulez, si vous ne connaissez pas les clés de votre tableau, si vous les connaissez, vous pouvez faire comme:

fields[row][column]
0
Pol Vilarrasa 11 avril 2018 à 19:43

Vous pouvez utiliser le décalage de bits d'un bit vers la droite, ce qui divise la valeur par deux et renvoie un nombre entier pour l'index du milieu.

DEMO

var fields = [
    [2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0],
    [7, 1, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 5, 7, 0],
    [7, 7, 7, 7, 7, 7, 7, 1, 7, 7, 7, 7, 7, 7, 7, 7, 0],
    [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0],
    [7, 7, 3, 7, 7, 7, 7, 7, 0, 7, 7, 7, 4, 7, 0, 0, 0],
    [0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0],
    [2, 2, 2, 0, 0, 7, 7, 7, 0, 0, 0, 7, 7, 2, 2, 2, 2],
    [2, 1, 2, 2, 0, 7, 7, 7, 7, 7, 0, 2, 2, 2, 2, 0, 0],
    [7, 7, 2, 2, 0, 0, 7, 7, 11, 7, 0, 0, 0, 0, 0, 0, 0],
    [7, 7, 7, 2, 0, 7, 7, 7, 7, 7, 7, 7, 2, 2, 0, 0, 0],
    [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2],
    [0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2],
    [0, 0, 0, 7, 7, 0, 7, 7, 7, 7, 3, 7, 7, 2, 2, 2, 2],
    [2, 7, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 1, 2, 2, 2],
    [2, 1, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 2, 2, 2, 0, 0],
    [2, 2, 2, 2, 7, 0, 7, 7, 7, 7, 7, 2, 2, 0, 0, 0, 0],
    [2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 2, 0, 0, 0, 0, 0],

  ],
  row = fields.length >> 1,
  
  result = fields[row],
  
  col = result.length >> 1;

fields[row][col] = 34

console.log(fields)
.as-console-wrapper { max-height: 100% !important; top: 0; }
0
Narendra Jadhav 11 avril 2018 à 19:48

Vous pouvez exécuter une fonction comme celle-ci sur le tableau et lui donner les paramètres pour le nombre que vous souhaitez modifier (num) et le nombre auquel vous souhaitez le changer (newNum)

var fields = [
[2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,0],
[7,1,2,2,7,7,7,7,7,7,7,7,7,3,5,7,0],
[7,7,7,7,7,7,7,1,7,7,7,7,7,7,7,7,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0],
[7,7,3,7,7,7,7,7,0,7,7,7,4,7,0,0,0],
[0,0,0,0,0,7,7,7,0,0,7,7,7,7,7,0,0],
[2,2,2,0,0,7,7,7,0,0,0,7,7,2,2,2,2],
[2,1,2,2,0,7,7,7,7,7,0,2,2,2,2,0,0],
[7,7,2,2,0,0,7,7,11,7,0,0,0,0,0,0,0], // this row i want change the 11
[7,7,7,2,0,7,7,7,7,7,7,7,2,2,0,0,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,0,7,7,0,7,7,7,7,3,7,7,2,2,2,2],
[2,7,0,0,0,0,7,0,7,7,7,7,7,1,2,2,2],
[2,1,7,7,7,0,0,0,7,7,7,7,2,2,2,0,0],
[2,2,2,2,7,0,7,7,7,7,7,2,2,0,0,0,0],
[2,2,2,2,2,2,7,7,7,7,7,2,0,0,0,0,0], 

]

function swapValues(num, newNum) {
  fields = fields.map(val => val.map(v => v === num ? newNum : v))
}
swapValues(11, 9)
console.log(fields)
0
pigeontoe 11 avril 2018 à 19:52