我有几个随机数字的数组(我不知道它将是哪些以及它们中有多少,但它主要在1到15之间,不应该更多)
如何为此添加新的随机数,该随机数应尽可能接近此范围,哪些是唯一的(不能与现有数字相同)?
它在javascript中,示例数组:
var myarray = [4,5,1,9,6];
答案 0 :(得分:1)
这样的功能应该有效:
function addRandom(array, max)
{
if(array.length === max) {
return array;
}
var number = Math.round(Math.random() * (max - 1)) + 1;
if(array.indexOf(number) === -1) {
array.push(number);
return array;
}
return addRandom(array, max);
}
这将获取您的起始数组和最大随机整数。如果数组的长度已经等于最大整数,那么数组已满,您将找不到新的数组。否则,我们在1和最大值之间创建一个新的随机数。
为此,我们使用Math.random()
(从0-1返回一个浮点数),将其乘以一个小于最大值的值,将结果与Math.round()
相乘,然后加1.如果你说我们的最大值是15,然后从0到1浮点数乘以14得到0到14.然后舍入为整数,我们加1,所以我们的范围为1到15。
最后,我们使用Array.indexOf()
(IE 9+)查看该数字是否已存在。如果没有,那么我们使用Array.push()
追加数字,然后返回新数组。否则,我们将再次运行该函数并生成一个新数字。
使用我的JSFiddle对此进行测试。我从一个长度为5的数组开始,然后循环15次。您将在控制台中看到每次都会附加一个随机数,直到生成每个数字。一个例子是:
[4, 5, 1, 9, 6, 8]
[4, 5, 1, 9, 6, 8, 15]
[4, 5, 1, 9, 6, 8, 15, 2]
[4, 5, 1, 9, 6, 8, 15, 2, 3]
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12]
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12, 14]
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12, 14, 7]
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12, 14, 7, 11]
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12, 14, 7, 11, 10]
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12, 14, 7, 11, 10, 13]
[4, 5, 1, 9, 6, 8, 15, 2, 3, 12, 14, 7, 11, 10, 13]
[...]