Объедините 10 циклов в один в Javascript - PullRequest
0 голосов
/ 18 сентября 2018

Вот мой код с циклами и Я хочу сделать его короче (если возможно, за один цикл).

 function plan(piece) {

        for (i = 0; i < 10; i++) {
            piece.addStep('right');
        }
        for (i = 0; i < 9; i++) {
            piece.addStep('down');
        }
        for (i = 0; i < 8; i++) {
            piece.addStep('left');
        }
        for (i = 0; i < 7; i++) {
            piece.addStep('up');
        }
    }

и т. Д. До i <1 </p>

Я думал об этом в этом случае,

   function plan(piece) {
     for (i=10; i>1; i--){ 
         piece.addStep('right');
         piece.addStep('down');
         piece.addStep('left');
         piece.addStep('up');
     }

, но это было неправильно.Помогите пожалуйста!

вот вид задачи (лабиринт)

here's look of task(maze)

Ответы [ 5 ]

0 голосов
/ 18 сентября 2018

Сомневаюсь, что это эффективно, но вы можете быть Array fill, concat и forEach

var steps = [].concat(Array(10).fill("right"), Array(9).fill("down"), Array(8).fill("left"), Array(7).fill("up"))
steps.forEach(dir => piece.addStep(dir));
0 голосов
/ 18 сентября 2018

Вы можете добавить функцию для повторяющейся логики:

function addSteps(piece, n) {
    while (n--) {
        piece.addStep(piece);
    }
}

addSteps('right', 10);
addSteps('down', 9);
addSteps('left', 8);
addSteps('up', 7);
0 голосов
/ 18 сентября 2018

Один из вариантов:

function plan(piece) {
   ['right', 'down', 'left', 'up'].forEach((dir, ind) => {
      for (let i = 0; i < 10 - ind; i++) {
         piece.addStep(dir);
      }
   });
}
0 голосов
/ 18 сентября 2018

Вы можете взять вложенные циклы и увеличить индекс для получения правильного направления.

var sequence = ['right', 'down', 'left', 'up'],
     i, j,
     k = 0,
     l = sequence.length;

for (i = 0; i < 10; i++) {
    for (j = i; j < 10; j++) {
        document.getElementById('out').innerHTML += sequence[k] + '\n';
        // or piece.addStep(sequence[k]);
    }
    ++k;
    k %= l;
}
0 голосов
/ 18 сентября 2018

Просто объедините их все, введя несколько проверок if.

Например:

function plan(piece) {

        for (i = 0; i < 10; i++) {
            piece.addStep('right');
            if(i < 9)
              piece.addStep('down');
            if(i < 8)
              piece.addStep('left');
            if(i < 7)
              piece.addStep('up');
        }
 }
...