在Javascript中将10个周期合并为一个

问题描述 投票:0回答:5

这是我的循环代码,我希望缩短它(如果可能,在一个循环中)。

 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');
        }
    }

等...到我<1

我考虑过这种情况,

   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)

javascript cycle
5个回答
3
投票

您可以为重复逻辑添加功能:

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

addSteps('right', 10);
addSteps('down', 9);
addSteps('left', 8);
addSteps('up', 7);

1
投票

通过介绍一些if Checks简单地结合所有这些。

例如 :

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');
        }
 }

1
投票

一种选择是:

function plan(piece) {
   ['right', 'down', 'left', 'up'].forEach((dir, ind) => {
      for (let i = 0; i < 10 - ind; i++) {
         piece.addStep(dir);
      }
   });
}

0
投票

怀疑它是有效的,但你可以是数组填充,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
投票

您可以采用嵌套循环并递增索引以获得正确的方向。

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;
}
<pre id="out"></pre>
© www.soinside.com 2019 - 2024. All rights reserved.