唯一的随机数组javascript
unique random array javascript
我试图创建一个数组的6个唯一的随机数出的数组,用户给了他的最大值和最小值(不低于0,不高于37)。什么是错误的?
function randCalc(maxVal,minVal)
{
var maxVal = document.getElementById("maxRange").value;
var minVal = document.getElementById("minRange").value;
var tmpArray = new Array(6) ;
tmpArray = [0];
var realArray = new Array(6);
realArray = tmpArray;
if ((maxVal - minVal) < 6)
{
alert("</br>The difference cannot be lower then 6");
}
if (minVal<1)
{
alert("</br>The min value cannot be lower then 1");
}
if (maxVal>37)
{
throw alert("</br>The higher value cannot be higher then 37") ;
}
if(minVal>0 && ((maxVal-minVal)>=6)&& (maxVal<=37) )
{
document.writeln("</br>The random numbers are: ");
for(i=0;i<=(6);i++)
{
var randLotto = Math.floor(Math.random() * (maxVal - minVal + 2) + minVal);
tmpArray[i] = randLotto;
}
for(var j=0;j<=maxVal;j++)
{
for(var k=0;k<6;k++)
{
if(tmpArray[j]==realArray[k])
{
j++;
}
else if(tmpArray[j]!=realArray[k])
{
realArray[k]=tmpArray[j];
}
}
if(realArray[6]!=null)
{
break;
}
}
}
}
你知道怎么让它工作吗?
这是一个核心函数,用于在最小值和最大值之间创建N个随机数。
function randCalc(maxVal, minVal, numRandoms) {
var max = Math.max(maxVal, minVal);
var min = Math.min(maxVal, minVal);
// create a set to keep track of numbers we've already used so
// we don't repeat any random numbers
var set = {};
var randoms = [];
var rand;
// prevent infinite loop if not given enough range
if (max - min < numRandoms) {
return randoms;
}
while (randoms.length < numRandoms) {
rand = Math.floor((Math.random() * (max - min + 1) + min));
// if we haven't already used this random number
// then put it in our output array and add it to the set
if (!(rand in set)) {
randoms.push(rand);
set[rand] = true;
}
}
return randoms;
}
此函数与DOM或问题的任何特定限制无关。然后,你可以用另一个从DOM中检索信息的函数来包装它,检查是否所有内容都在范围内,然后调用这个核心函数。
function makeRandoms() {
// retrieve DOM values and convert them to numbers
var maxVal = document.getElementById("maxRange").value;
var minVal = document.getElementById("minRange").value;
if (!maxVal || !minVal) {
alert("You must specify both a minimum and maximum value");
return;
}
// convert both to numbers
maxVal = parseInt(maxVal, 10);
minVal = parseInt(minVal, 10);
if (minVal < 1) {
alert("The min value cannot be lower then 1");
return;
}
if (maxVal > 37) {
alert("The higher value cannot be higher then 37");
return;
}
if (maxVal - minVal < 6) {
alert("The difference cannot be lower then 6");
return;
}
var randoms = randCalc(maxVal, minVal, 6);
// output the randoms array here
document.getElementById("output").innerHTML = JSON.stringify(randoms);
}
这使得一个可重用的函数用于生成N个随机值,并使该实用程序函数与访问特定页面中的DOM的代码完全分离。由于这种方法使用集合来跟踪所使用的随机数,因此它可以扩展到非常大的数字范围或非常大的随机数,而其他一些预先构建所有可能输出列表的算法则没有这样的可扩展性。
工作演示:http://jsfiddle.net/jfriend00/48kCg/
这是一个JS函数,更简单,它做你想做的:
function randCalc(maxVal,minVal){
var text = "";
var possible = [];
for(var i = minVal; i < maxVal; i++){
possible.push(i);
}
for( var i=0; i < 6; i++ ){
if(text.length == 6){
return text;
}
text += possible[Math.floor(Math.random() * possible.length)];
if(text > 6){
text = text.substring(0, 6);
}
}
return text;
}
这一切看起来相当复杂。您可以使用以下命令创建一个数组,其中包含0到[max
]之间的[n
]随机数:
function createArrayWithUniqueRandomNumbers(n, max) {
var checkobj = {}
,arr = [];
while (arr.length < n) {
var x = Math.floor(Math.random()*(max+1));
if (!(x in checkobj)) {
checkobj[x] = 1;
arr.push(x);
}
}
//sorting for convenience
return arr.sort(function(a,b){return a-b;});
}
// usage
var myarr = createArrayWithUniqueRandomNumbers(6, 37);
相关文章:
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 将Javascript数组发送到控制器ASP.NET MVC
- JavaScript数组包含一个值
- 将JavaScript数组传递给函数
- javascript:数组循环
- 将数据存储在javascript数组中以供进一步使用
- 在Javascript数组中查找绝对最大值
- JavaScript数组优化以提高性能
- 在javascript数组中分散数字
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- Javascript数组动态
- javascript数组元素是否知道其封闭数组
- 将 JSON 数组解析为 JavaScript 数组
- 将Transform和Instance Variable转换为对象的JavaScript数组
- 使用Web Html表单创建Javascript数组
- 从重复的javascript数组结果集中只获取一行
- 如何为Javascript数组()的使用准备PHP变量
- Javascript数组和函数
- 为DataTables aoColumnDefs创建JavaScript数组(JSON格式)