js 生成两个整数之间不重复的n个随机整数
偶遇一个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'));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通