Создать случайный список слов с помощью JS

1

Я пытаюсь создать случайный генератор списка слов 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>
  • 0
    Кстати, лучше избавиться от имен переменных, таких как words0 или rnd0 rnd1 ...
  • 0
    Чтобы выбрать n случайных предметов из большего набора, перемешайте, а затем возьмите первые n предметов.
Показать ещё 2 комментария
Теги:
list
random

1 ответ

1

Если вы хотите случайным образом захватить N элементов из массива, классический способ сделать это:

  1. случайным образом перемешать ваш массив,
  2. забрать N первых элементов залитого массива

Пример кода:

function samples(items, number){
    items.sort(function() {return 0.5 - Math.random()});
    return items.slice(0, number);
}

Обратите внимание, что алгоритм перетасовки, вероятно, не самый лучший, он представлен в качестве примера, как указано @Phylogenesis.

Если вы предпочитаете не изобретать колеса, вы также можете использовать undercore.js, например, который предоставляет примерный метод

  • 0
    Это очень плохой алгоритм тасования . Используйте Фишера-Йейтса .
  • 0
    @ Филогенез, ты прав, но это очень просто понять и реализовать. Кстати, я добавил уведомление, чтобы сообщить, что этот алгоритм, вероятно, не самый лучший;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню