Javascript Maze Runner об ошибке Codewars - PullRequest
0 голосов
/ 07 июня 2018

Я пробираюсь через кодовые войны и сталкиваюсь с mazerunner (https://www.codewars.com/kata/maze-runner/train/javascript) Я был в тупике около 2 дней!

function mazeRunner(maze, directions) {

//find start value  

var x = 0; //x position of the start point
var y = 0; //y position of the start point

for (var j = 0 ; j < maze.length ; j++){
if (maze[j].indexOf(2) != -1){
  x = j;
  y = maze[j].indexOf(2)
}
      } // end of starting position forloop

console.log(x + ', ' + y)


  for (var turn = 0 ; turn < directions.length ; turn++){


if (directions[turn] == "N"){
 x -= 1;
}
if (directions[turn] == "S"){
 x += 1;
}
if (directions[turn] == "E"){
 y += 1;
}
if (directions[turn] == "W"){
 y -= 1;
}

 if (maze[x][y] === 1){
 return 'Dead';
 }else if (maze[x][y] === 3){
 return 'Finish';
 }

if (maze[x] === undefined || maze[y] === undefined){
return 'Dead';
}

}

return 'Lost';

}

Когда я запускаю это,это работает в большинстве сценариев, однако в последнем случае я получаю следующую ошибку

TypeError: Cannot read property '3' of undefined
at mazeRunner
at /home/codewarrior/index.js:87:19
at /home/codewarrior/index.js:155:5
at Object.handleError

Любая помощь будет принята с благодарностью! Я дергаю себя за это!

1 Ответ

0 голосов
/ 07 июня 2018

Проблема вашего решения в том, что после переезда вы просто проверяете значение maze[x][y]

В неудачном тесте maze[x] будет в некоторой точке undefined (двигается на юг длякакое-то время).Я предполагаю, что в этой же точке y будет 3, следовательно, ошибка Cannot read property '3' of undefined

Чтобы избежать этого, вы должны передвинуться вверх по коду, где вы проверяете неопределенность, прежде чем пытаться получить доступ к координатам:

// move this as first check
if (maze[x] === undefined || maze[y] === undefined){
  return 'Dead';
}
...