Я думаю, проблема здесь в том, что в
let randomSquare = Math.floor(Math.random() * squaredWidth);
вы иногда можете получить позицию, которую вы уже установили. И в этом случае, возможно, вам стоит попробовать другой подход.
function randomSquaresGenerator(positions) {
let arrIndex=[];
for(let i=0;i<squares.length;i++){
arrIndex.push(i);
}
for (let i = 0; i < positions; i++) {
let randomIndex = Math.floor(Math.random() * arrIndex.length);
let randomSquare = arrIndex[randomIndex];
arrIndex= [].concat(arrIndex.slice(0,randomIndex),arrIndex.slice(randomIndex+1,arrIndex.length));
squares[randomSquare].innerHTML = 2;
}
Там я определил массив с индексами основного массива, поэтому вы просто выбираете случайное число оттуда, и оно отображает вас в позицию массива, которая имеет 0. Затем вы удаляете этот элемент из массива и делаете то же самое, зная, что вы всегда получите доступную позицию. Вы можете на всякий случай добавить оператор if, чтобы проверять, больше ли позиций, чем размер массива.
Надеюсь, вам понравится.