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

在Javascript中将10个周期合并为一个周期,javascript,cycle,Javascript,Cycle,这是我的循环代码,我想缩短它(如果可能,在一个循环中)。 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;

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

 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');
        }
    }
但这是错误的。请帮忙

下面是任务(迷宫)的外观


通过引入一些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');
        }
 }
功能计划(件){
对于(i=0;i<10;i++){
工件。添加步骤(“右”);
如果(i<9)
件。添加步骤(“向下”);
如果(i<8)
工件。添加步骤(“左”);
如果(i<7)
工件。添加步骤(“向上”);
}
}

通过引入一些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');
        }
 }
功能计划(件){
对于(i=0;i<10;i++){
工件。添加步骤(“右”);
如果(i<9)
件。添加步骤(“向下”);
如果(i<8)
工件。添加步骤(“左”);
如果(i<7)
工件。添加步骤(“向上”);
}
}
一个选项是:

function plan(piece) {
   ['right', 'down', 'left', 'up'].forEach((dir, ind) => {
      for (let i = 0; i < 10 - ind; i++) {
         piece.addStep(dir);
      }
   });
}
功能计划(件){
['right'、'down'、'left'、'up'].forEach((dir,ind)=>{
for(设i=0;i<10-ind;i++){
工件添加步骤(dir);
}
});
}
一个选项是:

function plan(piece) {
   ['right', 'down', 'left', 'up'].forEach((dir, ind) => {
      for (let i = 0; i < 10 - ind; i++) {
         piece.addStep(dir);
      }
   });
}
功能计划(件){
['right'、'down'、'left'、'up'].forEach((dir,ind)=>{
for(设i=0;i<10-ind;i++){
工件添加步骤(dir);
}
});
}

您可以使用嵌套循环并增加索引以获得正确的方向

var序列=[“右”、“下”、“左”、“上”],
i、 j,
k=0,
l=序列长度;
对于(i=0;i<10;i++){
对于(j=i;j<10;j++){
document.getElementById('out').innerHTML+=sequence[k]+'\n';
//添加步骤(序列[k]);
}
++k;
k%=l;
}

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

var序列=[“右”、“下”、“左”、“上”],
i、 j,
k=0,
l=序列长度;
对于(i=0;i<10;i++){
对于(j=i;j<10;j++){
document.getElementById('out').innerHTML+=sequence[k]+'\n';
//添加步骤(序列[k]);
}
++k;
k%=l;
}

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

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

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

您可以为重复逻辑添加函数:

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

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

怀疑它是否有效,但您可以使用数组填充、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));

怀疑它是否有效,但您可以使用数组填充、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));


顺序重要吗?是
piece.addStep('right');工件。添加步骤(“右”);件。添加步骤(“向下”)
piece.addStep('right')相同;件。添加步骤(“向下”);工件。添加步骤(“右”)?您想调用piece.addSteps('right')10次piece.addSteps('down')9次,依此类推?顺序对你来说重要吗?所以你想要
piece.addStep('right')要执行10次,
工件。添加步骤('down')9次等等?这是家庭作业吗?这不是问题(很容易成为下一个问题),但是:代码正在成为牺牲品(这是我贫血的小博客上的一篇文章)。在适当的范围内声明变量。在松散模式下不声明它们会使它们成为全局的。顺序重要吗?是
piece.addStep('right');工件。添加步骤(“右”);件。添加步骤(“向下”)
piece.addStep('right')相同;件。添加步骤(“向下”);工件。添加步骤(“右”)?您想调用piece.addSteps('right')10次piece.addSteps('down')9次,依此类推?顺序对你来说重要吗?所以你想要
piece.addStep('right')要执行10次,
工件。添加步骤('down')9次等等?这是家庭作业吗?这不是问题(很容易成为下一个问题),但是:代码正在成为牺牲品(这是我贫血的小博客上的一篇文章)。在适当的范围内声明变量。在松散模式下不声明它们会使它们成为globals.Thx,但仍然需要大量的代码字符串。如何使它变短?“要自动减少i?”先生,除非你在打代码高尔夫,否则它真的不需要变小。如果它被缩小,它将很难阅读。首先为人而写,其次为机器而写:)@MR可能有更好的方法,发布此解决方案是为了使其更可读、更易懂,并尽可能降低复杂性,:-)Thx,但仍然需要大量的代码字符串。如何使它变短?“要自动减少i?”先生,除非你在打代码高尔夫,否则它真的不需要变小。如果它被缩小,它将很难阅读。首先为人而写,其次为机器而写:)@MR可能有更好的方法,发布此解决方案是为了使其更可读、更易懂,并尽可能降低复杂性,:-)最好的方法。最好的方法。我喜欢这个答案,因为它比只适用于这个特定螺旋的嵌套循环更通用。我喜欢这个答案,因为它比只适用于这个特定螺旋的嵌套循环更通用。