[英]How do i loop through an array backwards?
我正在尝试使用 p5.js 在 java 脚本中制作蛇,并将蛇作为一个数组,其中头部是第一个索引,尾部是每个位置。 我试图向后遍历数组以移动盒子,这样它们就不会全部都在一个正方形上,但是当我尝试这个时,其余的代码停止工作。 头部应该向下,当我在另一端的头部正常循环时,这会起作用,但需要向后移动,以便我可以向数组中添加更多内容。 这是我的代码:
function setup() {
createCanvas(400, 400);
}
class SnakeBlock{
constructor(x, y, isHead){
this.x = x;
this.y = y;
this.isHead = isHead;
}
draw(){
fill("green");
noStroke();
rect(this.x * 40, this.y * 40, 40, 40)
}
move(snake, x){
if(this.isHead == true){
this.y += 1;
}
else{
this.y = snake[x - 1].y;
this.x = snake[x - 1].x;
}
}
}
var length = 4;
var moveCounter = 20;
var snake = [new SnakeBlock(0, 0, true),new SnakeBlock(1, 0, false),new SnakeBlock(2, 0, false), new SnakeBlock(3, 0, false)];
function draw() {
background(0);
for(let x = length - 1; x > 0; x--){
snake[x].draw();
}
if(moveCounter == 0){
for(let x = length - 1; x > 0; x--){
snake[x].move(snake, x);
snake[x].draw();
}
moveCounter = 20;
}
else{
moveCounter -= 1;
}
}
回到当我让它以另一种方式循环时,蛇头会向下移动,如蛇类中的 move() 函数所示,但是当我向后循环时,它根本不会向下移动,只是停留在原地。 是的,我在以另一种方式循环时确实反转了数组。
很简单,换个方式循环。 而不是i++
使用i--
:
for(i = 0; i < array.length; i++){
// do something with array[i]
}
// you go backwards:
for(i = array.length - 1; i >= 0; i--){
// do something with array[i]
}
选项1
var arr = [1, 2, 3, 4, 5];
for (var i = arr.length - 1; i >= 0; i--) {
console.log(arr[i]);
}
选项 2
var arr = [1, 2, 3, 4, 5];
arr.slice().reverse().forEach((item) => {
console.log(item);
});
您可以使用Array.prototype.reduceRight()
方法实现此目的
const arr = [1,2,3,4,5]; arr.reduceRight((_, el) => { console.log(el); // do stuff return el; }, null)
有关reduceRight 的更多信息 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.