Я создал сетку со случайными прямоугольниками, желтым и одним красным. Проблема в том, что когда я обновляю страницу, иногда красный прямоугольник не появляется, он где-то спрятан, я думаю, под желтым прямоугольником. Также иногда даже желтые квадратики не все отображаются. Я предполагаю, что есть проблема в цикле их создания?
var grid = document.getElementById("grid-box");
for (var i = 1; i <= 100; i++) {
var square = document.createElement("div");
square.className = 'square';
square.id = 'square' + i;
grid.appendChild(square);
}
var obstacles = [];
while (obstacles.length < 10) {
var randomIndex = parseInt(99 * Math.random());
if (obstacles.indexOf(randomIndex) === -1) {
obstacles.push(randomIndex);
document.getElementById('square' + randomIndex).style.backgroundColor = 'yellow';
}
}
var playerOne = [];
while (playerOne.length < 1) {
var randomIndex = parseInt(99 * Math.random());
if (playerOne.indexOf(randomIndex) === -1) {
playerOne.push(randomIndex);
document.getElementById('square' + randomIndex).style.backgroundColor = 'red';
}
}#grid-box {
width: 400px;
height: 400px;
margin: 0 auto;
font-size: 0;
position: relative;
}
#grid-box>div.square {
font-size: 1rem;
vertical-align: top;
display: inline-block;
width: 10%;
height: 10%;
box-sizing: border-box;
border: 1px solid #000;
}<script src = "https://code.jquery.com/jquery-1.12.4.js"></script>
<div id = "grid-box"></div>


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Math.random() иногда возвращает 0, но ваши идентификаторы начинаются с 1, например: «квадрат1», «квадрата0» нет div.
Запустите цикл с 0:
for (var i = 0; i < 100; i++)
you have to change 2 things:
1. начальное значение i должно быть 0 при создании квадратов
2. когда вы делаете красную коробку, то
заменять
if (playerOne.indexOf(randomIndex)
с участием
if (playerOne.indexOf(randomIndex) === -1 && obstacles.indexOf(randomIndex) === -1) {
var grid = document.getElementById("grid-box");
// create 100 squares
for (var i = 0; i < 100; i++) { // first change
var square = document.createElement("div");
square.className = 'square';
square.id = 'square' + i;
grid.appendChild(square);
}
var obstacles = [];
while (obstacles.length < 10) {
var randomIndex = parseInt(99 * Math.random());
if (obstacles.indexOf(randomIndex) === -1) {
obstacles.push(randomIndex);
document.getElementById('square' + randomIndex).style.backgroundColor = 'yellow';
}
}
var playerOne = [];
while (playerOne.length < 1) {
var randomIndex = parseInt(99 * Math.random());
if (playerOne.indexOf(randomIndex) === -1 && obstacles.indexOf(randomIndex) === -1) { // second change
playerOne.push(randomIndex);
document.getElementById('square' + randomIndex).style.backgroundColor = 'red';
}
}
Это потому, что когда randomIndex будет равен нулю (0), вы ищете элемент с идентификатором «square0», и он недоступен, потому что ваш цикл for начинается с 1 до 100.