整理了一下随机生成指定范围内指定长度且不重复的字符串数组的方法。不多说,直接上代码。
var getArrStr = {
dataArr: [],
getConfig: function (dataNum, maxNum) {
getArrStr.dataArr = [];
if (dataNum > maxNum || dataNum <= 0) {
return "输入的数据有误!";
} else {
getArrStr.setConfig(dataNum, maxNum);
return getArrStr.dataArr.toString();
}
},
setConfig: function (dataNum, maxNum) { //生成数组单个数据
var data = parseInt(Math.random() * maxNum);
if (getArrStr.dataArr.length < 0) {
getArrStr.dataArr.push(data);
getArrStr.setConfig(dataNum, maxNum);
} else {
if (getArrStr.dataArr.length >= dataNum) {
return false;
} else {
var hasThis = getArrStr.checkConfig(data, getArrStr.dataArr);
if (hasThis != "-1") {
getArrStr.setConfig(dataNum, maxNum);
} else {
getArrStr.dataArr.push(data);
getArrStr.setConfig(dataNum, maxNum);
}
}
}
},
checkConfig: function (needle, arr) {//检查生成的数据是否重复,重复返回下标,不重复返回-1;
var type = typeof needle;
if (type == 'string' || type == 'number') {
for (var i in arr) {
if (arr[i] == needle) {
return i;
}
}
}
return "-1";
}
};
window.onload = function () {
//生成答案;
document.write("随机生成[0-10)内长度为5的字符串数组"+getArrStr.getConfig(5, 10)+"</br>");
document.write("随机生成[0-10)内长度为10的字符串数组"+getArrStr.getConfig(10, 10));
}
首先:我们需要初始化一下记录数据的dataArr,避免重复调用的时候出现数据重复的问题,再判断一下传入的参数是否合理。
<span style="white-space:pre"> </span>getConfig: function (dataNum, maxNum) {
getArrStr.dataArr = [];
if (dataNum > maxNum || dataNum <= 0) {
return "输入的数据有误!";
} else {
getArrStr.setConfig(dataNum, maxNum);
return getArrStr.dataArr.toString();
}
},
然后:我们就可以随机生成指定范围的值了,生成之后我们判断记录数据的dataArr里面是否有值,如果没有就直接push进去。如果有值就进行dataArr的长度判断。长度不在范围内,就结束值的随机生成。反之就判断这个值是否存在于dataArr内,如果存在,就再次调用getArrStr.setConfig()方法,如果不存在就将值存入dataArr里面并再次调用getArrStr.setConfig()方法直到生成的dataArr的长度达到指定长度后再结束。
setConfig: function (dataNum, maxNum) { //生成数组单个数据
var data = parseInt(Math.random() * maxNum);//生成随机数
if (getArrStr.dataArr.length < 0) {
getArrStr.dataArr.push(data);
getArrStr.setConfig(dataNum, maxNum);
} else {
if (getArrStr.dataArr.length >= dataNum) {
return false;
} else {
var hasThis = getArrStr.checkConfig(data, getArrStr.dataArr);//判断随机数是否存在于目标数组中
if (hasThis != "-1") {
getArrStr.setConfig(dataNum, maxNum);
} else {
getArrStr.dataArr.push(data);
getArrStr.setConfig(dataNum, maxNum);
}
}
}
},
判断一个值是否存在于一个数组里的方法:如果存在就返回该值在该数组里面的下标,如果不存在就返回-1.
<span style="white-space:pre"> </span>checkConfig: function (needle, arr) {//检查生成的数据是否重复,重复返回下标,不重复返回-1;
var type = typeof needle;
if (type == 'string' || type == 'number') {
for (var i in arr) {
if (arr[i] == needle) {
return i;
}
}
}
return "-1";
}
ok,我们看一下返回的结果: