今天在公衆號裏邊看到這個問題,就本身寫了下,發現本身仍是有許多沒注意到的,在此記錄,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