Удалите случайный пункт списка

Дана кнопка и список ul, заполненный пунктами. По клику на кнопку удалите случайный пункт списка

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <button>press me</button>
    <ul>
      <li>text</li>
      <li>text</li>
      <li>text</li>
      <li>text</li>
    </ul>
    <script>
      document.querySelector("button").addEventListener("click", function () {
<Один вариант удаления из списка>
        // let oList = document.querySelector("ul");
        // let remove = oList.removeChild(oList.lastChild);
<Второй вариант удаления из списка>
        let remove = document.querySelector('li').remove();
      });
    </script>
  </body>
</html>

Сначала я думал, что нужно создать массив из li и удалять из него по рандомному индексу, который можно сгенерировать как-то так:

      let arr = [...document.querySelectorAll("li")]
            for (const element in lis) {
              document
                .querySelector("button")
                .addEventListener("click", function () {
             let random = Math.ceil(Math.random()*arr.length)
             document.querySelector('li').remove(random)
                });
            }

но получается какая-то дичь


Ответы (1 шт):

Автор решения: Dev18

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

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

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

Заменю Math.ceil() на Math.floor()

let button = document.querySelector("button");

button.addEventListener("click", function () {
  let arr = [...document.querySelectorAll("li")]; // Обновляем массив с элементами списка
  /* Проверка спасет тебя от случайной ошибки. (пр:если список вдруг пуст). 
  Всегда проверяй, прежде чем действовать! ? */
  if (arr.length > 0) {
    let randomIndex = Math.floor(Math.random() * arr.length);
    arr[randomIndex].remove(); // Удаляем элемент с случайным индексом
  }
});

let button = document.querySelector("button");

button.addEventListener("click", function() {
  let arr = [...document.querySelectorAll("li")]; // Обновляем массив с элементами списка
  if (arr.length > 0) {
    let randomIndex = Math.floor(Math.random() * arr.length);
    arr[randomIndex].remove(); // Удаляем элемент с случайным индексом
  }
});
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>
</head>

<body>
  <button>press me</button>
  <ul>
    <li>text</li>
    <li>text</li>
    <li>text</li>
    <li>text</li>
  </ul>

</body>

</html>

→ Ссылка