在JavaScript若是须要生成一段不一样的随机数,最好的方法,仍是将要产生的随机数的范围放到这一个数组,并打乱这个数组的顺序。javascript
因为JavaScript里面是没有shuffle这个函数的,因此咱们要打乱数组的顺序仍是要本身来。html
最好的方法仍是遍历这个数组,对每个元素都和一个随机位置的元素交换位置。java
这种方法最快,也基本就是其余编程语文中的shuffle思想。编程
具体以下:数组
var array=[1,2,3,4,5,6,7,8,9]; for(var i=0;i<array.length;i++){ var random_index=Math.floor(Math.random()*array.length);//产生一个在0到数组长度之间的随机数 //经典的临时变量交换 var t=array[i]; array[i]=array[random_index]; array[random_index]=t; }
上述代码将产生1-9之间,9个不一样都的随机数,也就是将这1-9这个数组打乱。dom
这里关键的难点仍是Javascript的随机数的取法。JavaScript自带的随机数函数,也就是Math.random()。Math.random()只能在0.0~1.0之间的产生一个伪随机数,同时包含0不包含1,好比0.8647578968666494。所以咱们须要对其加工。函数
Math.ceil(Math.random()*10);//获取从1到10的随机整数 ,取0的几率极小。 Math.round(Math.random());//可均衡获取0到1的随机整数。 Math.floor(Math.random()*10);//可均衡获取0到9的随机整数。 Math.round(Math.random()*10);//基本均衡获取0到10的随机整数,其中获取最小值0和最大值10的概率少一半。由于结果在0~0.4 为0,0.5到1.4为……8.5到9.4为9,9.5到9.9为10。因此头尾的分布区间只有其余数字的一半。
其中这里:Math.ceil()是向上取整。Math.floor()是向下取整。Math.round()是四舍五入。基本用到Math.floor()配合Math.random()乘以一个产生范围来搞出一个随机整数了。code
所以,上述的JavaScript生成一段序列不一样的随机数,JavaScript的shuffle函数,随上以下的HTML代码修饰:htm
<html> <body> <p id="init"></p> <p id="result"></p> </body> <script> var array=[1,2,3,4,5,6,7,8,9]; document.getElementById("init").innerHTML=array; for(var i=0;i<array.length;i++){ var random_index=Math.floor(Math.random()*array.length);//产生一个在0到数组长度之间的随机数 //经典的临时变量交换 var t=array[i]; array[i]=array[random_index]; array[random_index]=t; } document.getElementById("result").innerHTML=array; </script> </html>
运行结果以下:blog