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

У меня есть следующая функция для генерации названий стран для викторины. Я хочу сгенерировать случайное имя из массива и показать его на экране, а затем удалить, чтобы у меня не было повторяющихся вопросов. Кто-то предложил использовать сплайс так, как это показано в коде, который я никогда раньше не использовал, поэтому я не могу понять, почему он работает плохо. Можете ли вы помочь мне найти, что не так? Thanx! Вот код:

<div>
 <div style="float:left">
<h1> <span id="questionnum"></span>. Can you locate <span id="countryquestion"></span> on the map?</h1>
</div>


<script type="text/javascript">
generateCountry();


function generateCountry(){

filenames = [ "Albania", "Andorra", "Armenia", "Austria", "Azerbaijan", "Belarus", "Belgium", "Bosnia and Herzegovina", "Bulgaria", "Croatia", "Cyprus", "Czech Republic", "Denmark", "Estonia", "Finland", "France", "Georgia", "Germany", "Greece", "Hungary", "Iceland", "Ireland", "Italy", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "FYROM", "Malta", "Moldova", "Monaco", "Montenegro", "The Netherlands", "Norway", "Poland", "Portugal", "Romania", "Russia", "San Marino", "Serbia", "Slovakia", "Slovenia", "Spain", "Sweden", "Switzerland", "Ukraine", "United Kingdom" ];

filename = filenames.splice(Math.floor(Math.random()*filenames.length), 1);

document.getElementById('countryquestion').textContent = filename[0];

}

</script>

редактировать для Луи

Вы правы... Я просто заменил document.write на getelementById, как показано ниже, и у меня возник какой-то конфликт.

document.getElementById('countryquestion').textContent = filename;

Я использую эту и другую функцию, чтобы проверить, нажал ли пользователь нужную страну на карте. При добавлении вашего кода появляется первое название страны, и когда я нажимаю на карту, ничего не происходит. Я не получаю никакого ответа, и название страны остается неизменным, так как функция, вероятно, больше не вызывается. Это функция для получения названия страны из googlemaps. Единственное, что должно произойти, - это сравнить имя файла (ваш randElement) со страной из карт Google и затем вызвать generateCountry(), был ли ответ правильным или неправильным, но сейчас это не происходит.. почему?

 function getCountry(latLng) {
              geocoder.geocode( {'latLng': latLng},
                function(results, status) {
                  if(status == google.maps.GeocoderStatus.OK) {
                    if(results[0]) {
                      for(var i = 0; i < results[0].address_components.length; i++) {
                        if(results[0].address_components[i].types[0] == "country") {
                          if(results[0].address_components[i].long_name == **filename**) {

                                right();
                                generateCountry();
                                numQuestions();
                                updateScore();
                                countRights();
                                showProgress();

                           } else {


                            wrong();
                             updateLives();
                              generateCountry();
                                numQuestions();
                                 showProgress();


                           }
                        }
                      }
                    }


                    else {
                      alert("No results");
                    }
                  }
                  else {

                 water(); 
                  }
                }
              );
      }  

1 ответ

Смотрите: http://jsfiddle.net/bXVr9/

var filenames = [ "Albania", "Andorra", "Armenia", "Austria"];

// Get a random index
var index = Math.floor(Math.random() * filenames.length);

// This holds your random name
var randElement = filenames[index];

// Remove it
filenames.splice(index, 1);

document.write("Country: " + randElement + "<br />");
document.write("Remaining: " + filenames + "<br />");
Другие вопросы по тегам