我需要一些给定集合中的随机数字。必须随机选择数字的数量和数字。
假设数量的范围是2到5,数字的集合是1到4.一些可能的结果可能是:
13; 334; 42331; ...
min <input type = "number" id = "min_txt" value="2" min="1" />
max <input type = "number" id = "max_txt" value="5" min="1" />
numbers <input type = "number" id = "numbers_txt" value="4" min="1" max="5" />
<button type="button" onClick="func()">click</button>
<input type = "text" id = "arr_txt" />
<script>
function func(){
var min = min_txt.value;
var max = max_txt.value;
var numbers = numbers_txt.value;
var arr = [];
arr_txt.value="";
// set quantity (e.g. 3)
var quantity = Math.floor(Math.random() * (max - min + 1)) + min;
// actual operation
for (var i = 0; i < quantity; i++) {
var number = Math.floor((Math.random() * numbers) + 1);
arr.push(number);
}
// output the result
for (var i = 0; i < arr.length; i++) {
arr_txt.value=arr_txt.value+arr[i];
}
}
</script>
问题是,我几乎没有得到我期望的结果。有时候我会得到类似31112342144313124134342131213224的信息。
答案 0 :(得分:2)
min
是一个字符串。通过添加Math.floor(Math.random() * (max - min + 1))
和min
来计算数量时,它会执行字符串连接,而不是添加。因此,数量可能会导致“12”或“22”或“52”之类的结果。
您可以通过确保您的数值实际为数字来防止这种情况:
var min = parseInt(min_txt.value);
var max = parseInt(max_txt.value);
var numbers = parseInt(numbers_txt.value);
答案 1 :(得分:0)
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function getRandomArray(min, max, minCount, maxCount) {
var count = getRandom(minCount, maxCount);
var arr = [];
while (count-- > 0)
arr.push(getRandom(min, max));
return arr;
}
将上述函数与正确的int参数一起使用