您的位置:首页 > Web前端 > JavaScript

js 生成两个整数之间不重复的n个随机整数

2018-01-04 18:57 676 查看
偶遇一个js面试题:编写一个javscript函数 fn,该函数有一个参数 n(数字类型),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。 如果愿意,请先暂停阅读文章,自己动手写一下这个函数。

贴一些答案供参考学习。

甲:

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')
乙:我也照着写一个,没去管n是什么了

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'));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐