Переписывание для цикла с помощью forEach

#javascript #arrays #object #ecmascript-6

#javascript #массивы #объект #ecmascript-6

Вопрос:

Я хочу переписать следующий код:

     for(i = 0; i < grounds.length; i  ) {
        grounds[i].show();
    }
  

с помощью метода forEach таким образом:

 grounds.forEach(**what should i post here?**);
  

Полный код:

  class Ground {
        constructor(x, y, sizeX, sizeY) {
            this.x = x;
            this.y = y;
            this.sizeX = sizeX;
            this.sizeY = sizeY;
        }

        show() {
            ctx.fillStyle = "rgb(138, 75, 13)";
            ctx.fillRect(this.x, this.y, this.sizeX, this.sizeY);
        }
    }
}


let ground;
let grounds = [];

function generateGround() {
    for(i = 0; i < 10; i  ) {
        ground = new Ground(0   i * 40, canvas.height - 30, 40, 30);
        grounds.push(ground);
    }
}

generateGround();

function draw() {

    for(i = 0; i < grounds.length; i  ) {
        grounds[i].show();
    }

    requestAnimationFrame(draw);
}
requestAnimationFrame(draw);
  

Я прочитал несколько примеров, но я не могу найти способ выполнить метод show() для каждого основного элемента.

Комментарии:

1. for of Цикл был бы более дальновидным, поскольку он async/await совместим, foreach — это шаг назад в этом отношении.

Ответ №1:

Добавьте анонимную функцию, которая принимает параметр item (или как вы хотите его назвать), затем вызовите item.show() :

 grounds.forEach(item => item.show())
  

Старые браузеры могут не поддерживать функции со стрелками — в таком случае сделайте это вместо:

 grounds.forEach(function(item) {
    item.show();
})
  

Комментарии:

1. Исправлено @wiesson.