向阵列添加新的唯一编号

时间:2014-04-16 23:26:26

标签: javascript arrays

我有几个随机数字的数组(我不知道它将是哪些以及它们中有多少,但它主要在1到15之间,不应该更多)

如何为此添加新的随机数,该随机数应尽可能接近此范围,哪些是唯一的(不能与现有数字相同)?

它在javascript中,示例数组:

var myarray = [4,5,1,9,6];

1 个答案:

答案 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]
[...]