【JavaScript】生成一段序列不一樣的隨機數

在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

相關文章
相關標籤/搜索