2017-01-15 3 views
0

Массив, который я пробовал перебрать, называется commands в объекте ниже. Я дал ему ряд команд, которые я определил в функциях ниже. И мой цикл for находится в нижней функции под названием commandsArray(). Я пытаюсь вызвать commandsArray() в программе, чтобы выполнить цикл над массивом, но он не работает.Как перебирать элементы в массиве Javascript с циклом for, выполняя каждый элемент отдельно, прежде чем перейти к следующему (до завершения)?

Я не уверен, что я делаю неправильно. Я определенно хотел бы использовать for-loop здесь и попытаться сделать эту работу, если это возможно. Я новичок в Javascript.

 var myRover = { 
    position: [[0],[0]], 
    direction: 'N', 
    roverDirections: ['N', 'E', 'S', 'W'], 
    marsGrid: [[0], [0]], 
    obstacles: [], 
    commands: ['f','f', 'f', 'r', 'f', 'f', 'l', 'f', 'f', 'f', 'b', 'b'] 
    }; 

    // MOVE FORWARD & BACKWARD COMMANDS 

    function move(command) { 


    if (command === 'f') { //FORWARD 

    switch(myRover.direction) { 
    case 'N': 
     myRover.position[0]++; 
     break; 
    case 'E': 
     myRover.position[1]++; 
     break; 
    case 'S': 
     myRover.position[0]--; 
     break; 
    case 'W': 
     myRover.position[1]--; 
     break; 
     } 
    } 

    else if (command === 'b') { //BACKWARD 

     switch(myRover.direction) { 
     case 'N': 
     myRover.position[0]--; 
     break; 
     case 'E': 
     myRover.position[1]--; 
     break; 
     case 'S': 
     myRover.position[0]++; 
     break; 
     case 'W': 
     myRover.position[1]++; 
     break; 

     } 
     } 
     return myRover.position; 
     } 



    // TURN COMMANDS 

    function turn(command){ 

    if (command === 'l') { //TURNING LEFT 

     switch (myRover.direction) { 
     case 'N': 
     myRover.direction = 'W'; 
     break; 
     case 'E': 
     myRover.direction = 'N'; 
     break; 
     case 'S': 
     myRover.direction = 'E'; 
     break; 
     case 'W': 
     myRover.direction = 'S'; 
     break; 
     } 
    } 

    if (command === "r") { //TURNING RIGHT 
     switch (myRover.direction) { 
     case 'N': 
     myRover.direction = 'E'; 
     break; 
     case 'E': 
     myRover.direction = 'S'; 
     break; 
     case 'S': 
     myRover.direction = 'W'; 
     break; 
     case 'W': 
     myRover.direction = 'N'; 
     break; 
    } 
} 
    return myRover.direction; 



} 





    // Executing on a Series of Commands From the Commands Array 

    function commandsArray() { 


    var commandsLength = myRover.commands.length; 
    for (var i = 0; i <= commandsLength; i++) { 
     if (commandsLength[i] === 'f') { 
      move('f'); 
     } 

     else if (commandsLength[i] === 'b') { 
      move('b'); 
     } 

     if (commandsLength[i] === 'r') { 
      turn('r'); 
     } 
     else if (commandsLength[i] === 'l') { 
      turn('l'); 
     } 

     return myRover.position; 
    } 
+0

что значит "не работает" означает? Можете ли вы поделиться сообщением об ошибке? –

+0

«Это не работает» не описывает, что происходит. Быть конкретной! – nem035

+0

'но это не работает' каким образом. Что вы ожидаете? Что вы наблюдаете? Есть ошибки в консоли –

ответ

0

Из этого блока кода:

function commandsArray() { 

    var commandsLength = myRover.commands.length; 
    for (var i = 0; i <= commandsLength; i++) { 
     if (commandsLength[i] === 'f') { 
      move('f'); 
     } 

     else if (commandsLength[i] === 'b') { 
      move('b'); 
     } 

     if (commandsLength[i] === 'r') { 
      turn('r'); 
     } 
     else if (commandsLength[i] === 'l') { 
      turn('l'); 
     } 

     return myRover.position; 
    } 
} 

Похоже return myRover.position находится внутри цикла for. И myRover.commands содержит массив (не commandsLength). Попробуйте вместо этого:

function commandsArray() { 

    var commandsLength = myRover.commands.length; 
    for (var i = 0; i <= commandsLength; i++) { 
     if (myRover.commands[i] === 'f') { 
      move('f'); 
     } 

     else if (myRover.commands[i] === 'b') { 
      move('b'); 
     } 

     if (myRover.commands[i] === 'r') { 
      turn('r'); 
     } 
     else if (myRover.commands[i] === 'l') { 
      turn('l'); 
     } 
    } 
    return myRover.position; 
} 

Или еще лучше:

function commandsArray() { 
    const turns = ['l', 'r']; 
    myRover.commands.forEach(command => { 
     if (turns.includes(command)) { 
      turn(command); 
     } else { 
      move(command); 
     } 
    }); 
    return myRover.position; 
} 
+0

Я не получал никаких сообщений об ошибках, но, скорее, при вызове функции attributesArray(), ровер фактически не переместился бы на сетку. – universesurfer

+1

Это сработало! Я изменил его в соответствии с вашим вторым предложением, и функция работала. Огромное спасибо. Эти моменты очень обнадеживают и удерживают меня. Спасибо Спасибо спасибо. – universesurfer

+0

Стоит ли вообще создавать переменную commandsLength в этом случае? – universesurfer

Смежные вопросы