js 生成兩個整數之間不重複的n個隨機整數
阿新 • • 發佈:2019-01-31
偶遇一個js面試題:編寫一個javscript函式 fn,該函式有一個引數 n(數字型別),其返回值是一個數組,該陣列內是 n 個隨機且不重複的整數,且整數取值範圍是 [2, 32]。 如果願意,請先暫停閱讀文章,自己動手寫一下這個函式。
貼一些答案供參考學習。
甲:
乙:我也照著寫一個,沒去管n是什麼了var fn=function(n){ var arr=[]; n=n&&(+n)>0?(+n).toFixed(0):0; if(n>0){ for(var i=0;i<n;i++){ var one=Math.floor(Math.random()*30+2); if(arr.indexOf(one)>-1){ one=Math.floor(Math.random()*30+2); i--; }else{ arr.push(one); } } console.log(arr); return arr; } } fn('11.11')
丙:function range(min, max) { return function (n) { var i, value, arr = []; for (i = 0 ; i < n; i++) { value = Math.floor(Math.random()*(max - min + 1) + min); if (arr.indexOf(value) < 0 ) { arr.push(value); } else { i--; } } console.log(arr); }; } var fn = range(2, 32); fn(5);
丁:function fn(n){ console.log(typeof n); //非數字 if(isNaN(n)) return []; //非小數 if(Number(n).toString().indexOf(".") != -1) return []; if(typeof n == "string") return []; //生產隨機數 var arr = []; var d1=new Date().getTime(); for(var i=0;i < n;i++){ var rnd = getRand(2,32); if(arr.indexOf(rnd) != -1){ i--; }else{ arr.push(rnd); } } return arr; } function getRand(min,max){ var num = Math.floor(Math.random()*30 + 2); console.log(num); if(min < num < max) return num; } console.log(fn(5));
var fn = function(n){
let arr = [];
let i = 0;
if(!isNaN(n)){
while(i < Math.floor(n)){
let number = Math.floor((Math.random() * (32 - 2) + 2));
if(arr.indexOf(number) < 0){
arr.push(number);
i++;
}
}
}
return arr;
};
console.log(fn('10.58'));