在JavaScript如果需要生成一段不同的随机数,最好的方法,还是将要产生的随机数的范围放到这一个数组,并打乱这个数组的顺序。
由于JavaScript里面是没有shuffle这个函数的,所以我们要打乱数组的顺序还是要自己来。
最好的方法还是遍历这个数组,对每一个元素都和一个随机位置的元素交换位置。
这种方法最快,也基本就是其他编程语文中的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这个数组打乱。
这里关键的难点还是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()乘以一个产生范围来搞出一个随机整数了。
因此,上述的JavaScript生成一段序列不同的随机数,JavaScript的shuffle函数,随上如下的HTML代码修饰:
<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>
运行结果如下: