您的位置:首页 > 其它

编写一个javscript函数 fn,该函数有一个参数 n(数字类型),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。

2017-12-19 16:34 1106 查看
function fn(n){
//判断是否是数字类型

if(isNaN(n)){
return [];
}
var random;
var arr=[];
for (var i = 0; i < n; i++) {
random=Math.floor(Math.random()*(32-2+1)+2);
//判断数组里是否有重复的值

if(isArr(random,arr)){
i--
}else{
arr.push(random);
}

}
return arr;
}

console.log(fn(3))

function isArr(elem,arr){
for (var j = 0, len = arr.length; j < len; j++) {
if(arr[j] == elem){
return true;
}
}
return false;
}


建议实现方式

function fn(n)
{
var array = new Array();//创建一个空的数组,存储要返回的数组。
for(var i= 0; i<n; i++)
{
//获得2到32范围的随机数
var rnd = getRand(2, 32);
if(isIncluded(rnd, array))
{
i--;
//如果数组里面有这个数,让i在下一个循环不变。
//这里的i--抵消掉了循环后的i++
}
else
{
array.push(rnd);//如果数组里没有这个随机数,就允许添加进这个数组。
}
}
return array;
}

//传递一个数据类型和数组,判断数组内是否有前者。
function isIncluded(element, array)
{
for (var i = 0, len = array.length; i < len; i++)
{
if(array[i] == element)
{
return true;
}
}
return false;
}

//传入一个范围,返回一个该范围的随机数。
function getRand(min, max)
{
//如果输入的min比max大,将它们的值交换
if( max< min)
{
var n = max;
max = min;
min = n;
}
//注意是max-min+1而不是max-min哦
return Math.floor(Math.random()* (max-min+1) ) + min;
}

//输出
demo = fn(31);//如果参数是比31还要大的数,可是会无限循环的哦。
for(var i= 0; i<demo.length; i++)
{
console.log(i+":"+demo[i]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐