編寫一個js函數,該函數有一個n(數字類型),其返回值是一個數組,該數組內是n個隨機且不重複的整數,且整數取值範圍是[2,32]

今天在公衆號裏邊看到這個問題,就本身寫了下,發現本身仍是有許多沒注意到的,在此記錄,dom

 

//返回一個隨機整數 function getRandom( min , max ){ var rand = Math.round( Math.random() * (max - min) + min ); return rand; }; //重複性驗證 function isRepeat(arr,n){ if (arr.indexOf(n) > -1) { return true; }; return false; }; function fn(n){ var arr = [],max = 32,min = 2; //是不是數字的驗證 var isNum = !isNaN(Number(n)); //是否合法驗證 var randOk = (n >= 1 && n <= (max - min + 1)) ? true :false; if (isNum && randOk) { for (var i = 0; i < n; i++) { var rand = getRandom(min,max); if (isRepeat(arr,rand)) { i-- ; }else{ arr.push(rand); } } } return arr; }; console.log(fn(31))
 
在此過程當中遇到幾個問題,關於函數取整數問題  作一下整理。

1.Math.random(); 結果爲0-1間的一個隨機數(包括0,不包括1) 
2.Math.floor(num); 參數num爲一個數值,函數結果爲num的整數部分。 
3.Math.round(num); 參數num爲一個數值,函數結果爲num四捨五入後的整數。函數

Math:數學對象,提供對數據的數學計算。
Math.random(); 返回0和1間(包括0,不包括1)的一個隨機數。對象

Math.ceil(n); 返回大於等於n的最小整數。
用Math.ceil(Math.random()*10);時,主要獲取1到10的隨機整數,取0的概率極小。get

Math.round(n); 返回n四捨五入後整數的值。
用Math.round(Math.random());可均衡獲取0到1的隨機整數。
用Math.round(Math.random()*10);時,可基本均衡獲取0到10的隨機整數,其中獲取最小值0和最大值10的概率少一半。數學

Math.floor(n); 返回小於等於n的最大整數。
用Math.floor(Math.random()*10);時,可均衡獲取0到9的隨機整數。io

相關文章
相關標籤/搜索