Как решить: TypeError: grid [i] [j] не определено - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь построить сетку и сохранить каждую ячейку сетки как объект в массиве с именем grid.Я определил сетку как глобальную переменную, поэтому я могу заполнить ее с помощью createGrid (), а затем прочитать ее с помощью drawGrid ().

Я хочу реализовать сетку как часть учебника по анимации холста.Мой код:

var grid = [];

function drawGrid() {
  for (var i = 0; i < cols; i++) {
    grid[i] = [];
    for (var j = 0; j < rows; j++) {
      if (grid[i][j].food === 0) {
        console.log("Has a good value")
      }
    }
  }
}

function Cell(i, ii) {
  this.i = i;
  this.ii = ii;
  this.food = false;
}

function createGrid() {
  for (var i = 0; i < cols; i++) {
    grid[i] = [];
    for (var j = 0; j < rows; j++) {
      grid[i][j] = new Cell(i, j);
    }
  }
}

function mainLoop() {
  clearCanvas();
  drawGrid();

  requestAnimationFrame(mainLoop)
}

createGrid();
mainLoop();

Я создаю сетку перед вызовом цикла, поэтому после вызова функции drawGrid () сетка уже заполнена.Я не помещаю createGrid () внутри цикла, потому что нет необходимости каждый раз создавать сетку, а также потому, что каждый раз при запуске цикла требуется много ресурсов

Браузер выдает здесь ошибку:

if (grid[i][j].food === false) {
  console.log("Has a good value")
}

1 Ответ

0 голосов
/ 08 апреля 2019

, поскольку тестируемое значение имеет логический тип, запись if (grid[i][j].food === false) { - нонсенс.

Вы должны кодировать следующим образом: if (grid[i][j].food) {, чтобы реализовать условие, если значение истинно
в противном случае, еслимы хотим реализовать условие, если оно ложно: if (!grid[i][j].food) {

все еще необходимо, чтобы значения i и j были правильными (i = от нуля до столбца-1 и т. д.)

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