在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可能有更好的方法,发布此解决方案是为了使其更可读、更易懂,并尽可能降低复杂性,:-)最好的方法。最好的方法。我喜欢这个答案,因为它比只适用于这个特定螺旋的嵌套循环更通用。我喜欢这个答案,因为它比只适用于这个特定螺旋的嵌套循环更通用。