由于我对JS还是很陌生,所以我认为向经验丰富的编码人员询问如何改善我的编码习惯和学习有效的基础知识并没有什么坏处。
所以我想知道我是否可以运行,在循环中说出两行代码x次数,然后在该块的其余部分上x次数。
所以代替这个:
for (let i = 0; i <= 10; i++) {
this.shapes[i].x -= 1;
this.shapes[i].draw(this.ctx);
}
for (let i = 0; i <= 10; i++) {
this.shapes[i].x += 1;
this.shapes[i].draw(this.ctx);
}
这样的东西存在吗?
for (let i = 0; i <= 10; i++) {
//run this section i amount of times
this.shapes[i].x -= 1;
this.shapes[i].draw(this.ctx);
//then run this i amount of times
this.shapes[i].x += 1;
this.shapes[i].draw(this.ctx);
}
答案 0 :(得分:2)
两个循环的主体之间的唯一区别似乎是一个语句。
您可以使用一些数学运算来确定索引,并使用一些逻辑语句来确定该值是应该增加还是减少,这是一个示例:
for (let i = 0; i <= 21; i++) {
const index = i % 11;
this.shapes[index].x += (i > 10) ? 1 : -1;
this.shapes[index].draw(this.ctx);
}
答案 1 :(得分:1)
如果代码完全相同,则可以这样重构:
split()
另一种选择是使用以delta作为参数的函数
for (let delta of [-1, +1]) {
for (let i = 0; i <= 10; i++) {
this.shapes[i].x += delta;
this.shapes[i].draw(this.ctx);
}
}
另一种选择是深复制您的初始形状,并在第一次绘制后将其恢复。
答案 2 :(得分:0)
您可以。然后定义更多变量,然后i
:
for (let i = 0, j=0; i <= 10; i++, j+= 2) {
console.log(i, j);
}
或在父范围中使用另一个var:
let j = 0;
for (let i = 0, j=0; i <= 10; i++, j+= 2) {
j += 2
console.log(i, j);
}
或者只使用普通的if,else和break语句。代码不必总是看起来很好。
答案 3 :(得分:0)
您可以循环执行20次而不是10次,如果i<10
则执行第二个代码,然后运行第一个代码。下面是带有简单日志记录的示例。
for(let i = 0;i<22;i++){
if(i<11) console.log('first')
else console.log('second')
}