偶得一前端面试题,作答如下,欢迎大佬review

来源:互联网 发布:centos 生成uuid 编辑:程序博客网 时间:2024/05/22 14:26

前端面试题目如下:

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

思考解题如下: (望各位不吝指正)

function fn(n) {    // 检查 n 是否是数字类型    if (typeof n == 'number') {        var arr = [];        var min = 2, max = 32;        // 检查 n 是否小于 数组长度        // 如果 n 大于 数组长度,不可能实现不重复        if ( n <= (max - min + 1)) {            for (var i = 0; i < n; i++) {                // 从[2, 32]的自然数数组中随机获取一个数字                var rnd = getRand(2, 32);                // 检查是否重复                if (checkInArr(arr, rnd)) {                    i--;                } else {                    arr.push(rnd);                }            }            return arr;        } else {            alert('error: '+ n + ' is greater than the length of array ' + (max - min + 1));        }    } else {        alert('error: the parameter should be typeof number');    }}// 从特定自然数数组中随机获取数字function getRand(min, max) {    var arr = [];    for (var i = min; i < max + 1; i++) {        arr.push(i);    }    var randomIndex = Math.round(Math.random()*(max - min));    var rnd = arr[randomIndex];    return rnd;}// 检查重复// 只要有一个重复返回true// 否则返回false,表示没有重复function checkInArr(arr, rnd) {    for (var i = 0; i < arr.length; i++) {        if (rnd === arr[i]) {            return true;        }    }    return false;}