首页 > 试题广场 >

编写一个JavsScript函数 fn,该函数有一个参数 n

[问答题]
编写一个JavsScript函数 fn,该函数有一个参数 n(数字类型, n <=31),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。(可以使用伪代码)
想法:创建随机的2到32的排序,再截取前n个数字
需要改进:对输入进行判断,是否合数据类型,会超出范围等

function fn(n) {
    let l = [];
    for (let i = 2; i <= 32; i++) {
        l.push(i);
    }
    l.sort((a, b) => Math.random() - 0.5);
    return (l.slice(0, n));
}

console.log(fn(10));

发表于 2023-03-27 08:04:21 回复(1)
function fn(n){
    let max = 32;
    let min = 2;
    let res = new Set();

    if(n>(max-min + 1)){
        return;
    }

    while(res.size != n){
        let num = Math.floor(Math.random() * (max - min + 1)) + min;
        res.add(num);
    }
    
    return [...res];
}

发表于 2022-04-17 15:35:58 回复(0)
function random(n) {
    let res = new Set;
    while(res.size != n) {
        res.add(Math.floor(Math.random() * n + 2))
    }
 
    return Array.from(res);
}

发表于 2020-06-20 10:58:03 回复(0)
function fn(n){
    for(let i=0;i<n;i++){
        arr[i]=Math.ceil(1+Math.random()*n)
    }
    return arr
}
发表于 2020-03-20 12:22:16 回复(0)
function random(num){
    // 因为join会减少一个,所以数组长度+1
    var arr=new Array(32).join('1').split('');
    arr.forEach((item,i)=>{
        if(i>0){
            arr[i]=arr[i-1]+1
        }else{
            arr[0]=2
        }
    })
    var arr_n=[]
    // 随机选择
    for(var i=0;i<num;i++){
        var n=parseInt(Math.random()*(30-i));
        arr_n.push(arr[n]);
        arr.splice(n,1);
    }
    return arr_n
}

发表于 2020-02-19 23:56:36 回复(0)
function fn(n){
    //1.判断参数n是否为数字类型
    let nType = typeof n;
    if(nType != "number" || n > 31) return false;
    //2.如果是数字类型就创建随机数组
    let arr = [];
    while(arr.length < n){
         //生成随机整数(2,32)
         num = Math.floor(Math.random()*(32-2)+2);
         arr.push(num);
         //3.对数组进行去重(也可以在加入之前看加入的元素是不是已经数组中,不在的话再push)
         arr = setArr(arr);
    }  
    return arr;     
}

//数组去重函数(可以用循环遍历实现)
function setArr(arr){
    let arr1 = arr;
    arr = [];
    let setarr = new Set(arr1);
    for(let item of setarr){
        arr.push(item);
    }
    return arr;
}

发表于 2019-07-16 17:39:25 回复(0)
function fn(n) {
if (n <= 31) {
let set = new Set()
if (!typeof n !== "number") {
n = Number(n)
}
for (let i = 0; i < 1000; i++) {
let num = Math.round(Math.random() * (32 - 2) + 2)
set.add(num)
if (set.size == n) {
return set
}
}

} else {
return "请输入一个小于等于31的数字"
}
}
let res = fn(31)
console.log(res);
发表于 2019-07-02 23:26:09 回复(0)