Все три оператора if в цикле for срабатывают, когда истинно только одно (JavaScript) - PullRequest
0 голосов
/ 05 октября 2018

Это меня немного озадачило.Всякий раз, когда я выполняю этот код, если один из операторов if в цикле for имеет значение true, все три подмассива weaknessArray вступают в силу.То же самое происходит, когда каждый оператор if находится в своем собственном цикле for и если вместо одного 2D-массива я использую три отдельных массива, по одному для каждого цикла for.

var typeChart = [2,2,2,2,2,2,4,2,2,2,2,2,2,0,2,2,2,2];
var blankArray = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
var weaknessArray = [blankArray,blankArray,blankArray];

for(i = 0; i<18; i++){
if(typeChart[i] === 0) weaknessArray[2][i] = 1;
if(typeChart[i] === 1) weaknessArray[1][i] = 1;
if(typeChart[i] === 4) weaknessArray[0][i] = 1;

console.log(weaknessArray);
}

1 Ответ

0 голосов
/ 05 октября 2018

В памяти только один blankArray объект;ваш weaknessArray содержит три ссылки на один и тот же объект .

Вместо этого создайте копии с .slice, так что вместо этого у вас в памяти будет три массива (ну, четыре, считая оригинал)из одного:

var typeChart = [2,2,2,2,2,2,4,2,2,2,2,2,2,0,2,2,2,2];
var blankArray = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
var weaknessArray = [blankArray.slice(), blankArray.slice(), blankArray.slice()];

for(i = 0; i<18; i++){
  if(typeChart[i] === 0) weaknessArray[2][i] = 1;
  if(typeChart[i] === 1) weaknessArray[1][i] = 1;
  if(typeChart[i] === 4) weaknessArray[0][i] = 1;

  console.log(weaknessArray);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...