js函数系列之数组:(1)生成不重复的随机数组
需求:编写一个
javascript
函数rndFn
,该函数有一个参数n(数字类型),其返回值是一个数组,该数组内是n个随机且不重复的整数,且整数取值范围是[1,20]。思路:这个函数需要传入3个参数:
- 范围参数,min、max,随机数个数,n;
- 功能要求:随机数,即一个随机数函数;
- 功能要求:不重复,即一个校验函数;
示例代码
function rndfn(min,max,n){
// 将整数取值范围作为变量提取出来
var min = min,
max = max;
// 健壮性:参数校验
// 准备一个容器
var arr = [];
// 循环
for(var i = 0 ; i < n ; i++){
// 创建一个随机数
var rnd = GetRandomNum(min,max);
// 检查是否重复
if(checkInArr(arr, rnd)){
i--;
}else{
arr.push(rnd);
}
}
return arr;
}
// 获取某个范围的随机数
function GetRandomNum(Min, Max) {
var Range = Max - Min;
var Rand = Math.random();
return (Min + Math.round(Rand * Range));
}
// 检查数组内是否重复
function checkInArr(arr,rnd){
// if(var rnd in arr){
// return true;
// }else {
// return false;
// }
for(var i = 0; i < arr.length; i++){
if(rnd === arr[i]){
return true;
}
}
return false;
}
// 调用函数
rndFn(1,10,3);
优化:
- 添加健壮性校验
if(!isThere(n)) return [];
if(!typeOK(n) && !is0KStr(n)) return [];
if(!rangeOK(n, min, max)) return [];
- 其他思路
- 校验函数
可以使用indexOf()方法
补充:本文借鉴了网上的文章,个人进行了一些整理和思考。