Javascript 使用JS生成随机单词列表

Javascript 使用JS生成随机单词列表,javascript,list,random,Javascript,List,Random,我试图构建一个随机的JS单词列表生成器,但是我这里的代码只生成一个单词。实际上,我想让它从以前给定的列表中生成一个包含30个单词的列表,可能是60个单词的列表,也可能是700个单词的列表,但结果应该总是30个单词,没有重复的单词,但我不知道如何实现这一点 此外,我希望访问者介绍他们自己的单词列表,然后单击“生成新单词列表”,然后页面将随机化,并在每次单击按钮时为他们提供30个不同顺序的单词列表 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN

我试图构建一个随机的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>

形式{
浮动:左;
填充:20px 20px 10px;
边框:1px实心#999;
}
标签{
浮动:左;
宽度:100px;
线高:22px;
边缘底部:10px;
字体大小:12px;
}
输入{
边缘底部:10px;
}
函数init(){
words0=[‘艺术’、‘汽车’、‘巴士’、‘地球’、‘相机’、‘电话’、‘太阳’、‘光’、‘数字’、];
df=单据.表单[0];
df.reset();
df[1]。onclick=function(){
rnd0=Math.floor(Math.random()*words0.length);
df[0]。值=words0[rnd0];
}
}
window.addEventListener?
window.addEventListener('load',init,false):
window.attachEvent('onload',init);
第一个字:

如果您想从一个数组中随机抓取N个项目,一种经典的方法是:

  • 随机洗牌你的阵型
  • 拾取被覆盖数组的前N项
  • 示例代码:

    function samples(items, number){
        items.sort(function() {return 0.5 - Math.random()});
        return items.slice(0, number);
    }
    
    注意,shuffle算法可能不是最好的,它是作为一个例子提供的,正如@Phylogenesis所提到的


    如果您希望避免重新发明轮子,也可以使用undercore.js,例如,它提供了一个

    顺便说一句,最好去掉变量名,如
    words0
    rnd0
    rnd1
    …从较大的集合中选择
    n
    随机项,然后选择第一个
    n
    项。然后您必须迭代,每次检查新的随机单词是否不在生成的单词列表中,直到有30个单词为止。类似于:do{var newWord=Math.floor(Math.random()*words0.length);if(wordsArr.indexOf(newWord)==-1){wordsArr.push(newWord);counter++;}}while(counter<30);感谢您的快速回复,这是否意味着我必须更改所有代码?你们谁能帮我一下吗?也许我可以让你访问我的网页,我们可以安排一些事情,对不起,我的英语不好。这是一个错误。使用@Phylogenesis您是对的,但是它很容易理解和实现。顺便说一句,我添加了一个通知,告知此算法可能不是最好的;)