Как случайным образом назначить классы в массиве элементу, созданному в цикле for

Я использую цикл for, чтобы создать множество элементов div, назначить имя класса и добавить родительский элемент div. У меня возникли трудности с дополнительным включением большего количества классов - случайным образом - из массива. Ниже приведен фрагмент.

let classesArray = ['slowest', 'slow', 'medium', 'fast', 'fastest'];
let randomClass = classesArray[Math.floor(Math.random() * classesArray.length)];

for (i = 0; i < 100; i++) {
  const test = document.createElement('div');
  test.className = 'speed ' + randomClass;
  document.getElementById('div-parent').appendChild(test);
}

Я могу создать дочерние элементы div с классом 'speed', и в них также включен случайный класс, но я получаю тот же самый случайный класс для всех элементов div.

Я надеюсь, что это будет выглядеть примерно так

<div id="div-parent">
  <div class="speed fast"></div>
  <div class="speed slow"></div>
  <div class="speed medium"></div>
  ...

Но это заканчивается примерно так

<div id="div-parent">
  <div class="speed fast"></div>
  <div class="speed fast"></div>
  <div class="speed fast"></div>
  ...

Можно ли случайно выбрать класс из массива и не повторять его для всех дочерних элементов?

2 ответа

Решение

Ваш код неверен... потому что let randomClass = classesArray[Math.floor(Math.random() * classesArray.length)]; существует во внешнем цикле.

переместить внутренний цикл ~

let classesArray = ['slowest', 'slow', 'medium', 'fast', 'fastest'];


for (i = 0; i < 100; i++) {
  const randomIndex = Math.floor(Math.random() * classesArray.length));
  const randomClass = classesArray[randomIndex];

  const test = document.createElement('div');
  test.className = 'speed ' + randomClass;
  document.getElementById('div-parent').appendChild(test);
}

Являющийся randomClass создается вне цикла, он имеет одинаковое значение в каждом начале цикла.

декларировать randomClass внутри цикла, чтобы он мог принимать вновь сгенерированный случайный класс в каждой итерации:

let classesArray = ['slowest', 'slow', 'medium', 'fast', 'fastest'];

for (let i = 0; i < 3; i++) {
  let randomClass = classesArray[Math.floor(Math.random() * classesArray.length)];
  const test = document.createElement('div');
  test.className = 'speed ' + randomClass;
  document.getElementById('div-parent').appendChild(test);
}

console.log(document.getElementById('div-parent').innerHTML)
<div id="div-parent"></div>

Другие вопросы по тегам