前端面试题目如下:
编写一个
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;
}