У меня есть веб-сайт, который даст вам случайный факт из Википедии, когда вы нажмете на большую красную кнопку. Я слышал от нескольких людей, что они получают определенные факты неоднократно, несмотря на то, есть более 200.Лучший способ случайного вытягивания из массива?
Большая красная кнопка onclick="giveafact()"
которая вызывает эту функцию:
function giveafact(){ //instead of relisting all array items here, add all the other arrays to this one
var factsList= foodFactsList.concat(musicFactsList,historyFactsList,popFactsList,sportsFactsList,technologyFactsList,televisionFactsList,miscFactsList);
randomFact = Math.floor(Math.random()*factsList.length);
document.getElementById("total").innerHTML=factsList.length;
document.getElementById("fact").innerHTML=factsList[randomFact];
updateShareLinks();
return false;
}
В принципе, у меня есть 8 различных массивов фактов, как вы можете видеть в var factsList
выше. Это значит, что пользователь может фильтровать по факту. По умолчанию фильтр отсутствует, поэтому все списки объединены.
Если это помогает, полный .js-файл находится здесь: http://thewikifix.com/scripts/script.js. Эти случайные функции «дайте факты» начинаются примерно по строке 442 с массивами над ними. (Простите грязный код, я знаю, что я очень часто смешиваю jQuery и Javascript.)
Сайт http://thewikifix.com, если он помогает кому-либо взглянуть на весь код.
Я просто пытаюсь понять, есть ли способ лучше рандомизировать факты, чем в настоящее время, возможно, добавив функцию, которая не позволит факту появляться дважды в строке или что-то подобное.
Любые предложения были бы замечательными!
Редактировать - Дополнительные мысли: Спасибо за ответы до сих пор. Есть ли способ удалить элемент из массива после его выбора через функцию Math.random, чтобы он просто не отображался вообще (если страница не была обновлена)? Если это так, как только все элементы были удалены из массива, есть способ сбросить массив в исходное состояние без необходимости обновления? Благодарю.
Возможный дубликат: http://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array –
Спасибо @ DanielA.White. Ссылка, приведенная там http://bost.ocks.org/mike/shuffle/, очень полезна. – Kyle