Я пытаюсь создать случайный генератор списка слов JS, но код, который у меня здесь, генерирует только одно слово. На самом деле я хочу, чтобы он сгенерировал список из 30 слов из ранее заданного списка, это может быть список из 60 слов или 700, но результат всегда должен быть 30 без дублированных слов, но я не знаю, как этого добиться.
Кроме того, я хотел бы, чтобы посетители представили свой собственный список слов, а затем нажмите "сгенерировать новый список слов", а затем страница будет рандомизироваться и дать им список из 30 слов с различным порядком каждый раз, когда они нажимают кнопку.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="language" content="english">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title></title>
<style type="text/css">
form {
float:left;
padding:20px 20px 10px;
border:1px solid #999;
}
label {
float:left;
width:100px;
line-height:22px;
margin-bottom:10px;
font-size:12px;
}
input {
margin-bottom:10px;
}
</style>
<script type="text/javascript">
function init(){
words0=['art','car','bus','earth','camera','phone','sun','light','number',];
df=document.forms[0];
df.reset();
df[1].onclick=function() {
rnd0=Math.floor(Math.random()*words0.length);
df[0].value=words0[rnd0];
}
}
window.addEventListener?
window.addEventListener('load',init,false):
window.attachEvent('onload',init);
</script>
</head>
<body>
<form action="#">
<div>
<label>word one:</label><input type="text" readonly="readonly"><br>
<input type="button" value="Click here to get random words">
<input type="reset" value="Clear">
</div>
</form>
</body>
</html>
Если вы хотите случайным образом захватить N элементов из массива, классический способ сделать это:
Пример кода:
function samples(items, number){
items.sort(function() {return 0.5 - Math.random()});
return items.slice(0, number);
}
Обратите внимание, что алгоритм перетасовки, вероятно, не самый лучший, он представлен в качестве примера, как указано @Phylogenesis.
Если вы предпочитаете не изобретать колеса, вы также можете использовать undercore.js, например, который предоставляет примерный метод
words0
илиrnd0
rnd1
...n
случайных предметов из большего набора, перемешайте, а затем возьмите первыеn
предметов.