Как случайным образом выбрать выбранный элемент в выпадающем меню Select, который не был выбран ранее в JavaScript? - PullRequest
0 голосов
/ 23 марта 2020

При нажатии кнопки я хочу запустить функцию, которая будет каждый раз случайным образом выбирать вариант из выпадающего списка, который не был выбран ранее. И если были выбраны все параметры, я хочу сбросить используемые параметры и начать с начала.

У меня есть функция, которая выбирает элемент, который ранее не был выбран случайным образом из массива ( credit до @ Радже sh)

function randomize(arr) {
  let data = [...arr];
  let chosenItems = [];

  function getRandomValue() {
    if (data.length === 0) {
      data = chosenItems;
      chosenItems = [];
    }
    const index = Math.floor(Math.random() * data.length);
    const choice = data.splice(index, 1)[0];

    chosenItems.push(choice);
    return choice;
  }
  
  return {
    randomItem: getRandomValue
  }
}

const dummyData = [ 1,2,3,4,5 ];

const randomizeData = randomize(dummyData);

for (let i = 0; i< 10; i++) {
  console.log(randomizeData.randomItem())
}

Я уже создал скрипт, который случайным образом выбирает элемент из выпадающего списка select2, но очень часто выбирает тот же элемент.

var optionsArray = new Array();
var first = $('select option')[0];
$('select option').each(function () { optionsArray.push(this) });

if (optionsArray.length > 1) {
    $('select').html('');

    var i = 0;

    var random

    while (i < optionsArray.length) {

        random = Math.floor(Math.random() * optionsArray.length)
        //if element hasn't been marked as "selected"
        if (optionsArray[random] != "selected") {
            $("select").append(optionsArray[random]);
            //mark element as selected
            optionsArray[random] = "selected"
            i++
        }
     }

    var newSelectedOption = $('select option')[0];
    $('select').val($(newSelectedOption).val()).trigger('change');

1 Ответ

1 голос
/ 23 марта 2020

<html>
     <body>
          <select id="dropdown">
               <option value="1">1</option>
               <option value="2">2</option>
               <option value="3">3</option>
          </select>
          <button id="btn">
               Generate
          </button>
     </body>
     <script>
          let dropdown = document.getElementById('dropdown');
          var options = [];
          var chosenItems = [];
          function setOptions(){
               for(var i = 0; i < dropdown.options.length; i++)
                    options.push(dropdown.options[i].value);
          }
          document.getElementById('btn').addEventListener("click", function(){
               options = options.filter( function( el ) {
                    return chosenItems.indexOf( el ) < 0;
               });
               if(options.length == 0){
                    console.log("reset data")
                    setOptions();
                    chosenItems = [];
               }
               var unSelectedRandom = options[Math.floor(Math.random() * options.length)]
               for(var i = 0; i < dropdown.options.length; i++){
                    var current = dropdown.options[i]
                    if ( current.value == unSelectedRandom ) {
                         dropdown.selectedIndex = i;
                         chosenItems.push(current.value);
                         console.log("chosen: "+chosenItems)
                    }
               }
          });
     </script>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...