向数组添加新的唯一编号

Adding new unique number to the array

本文关键字:唯一 编号 数组 添加      更新时间:2023-09-26

我有一个由几个随机数组成的数组(我不知道会是哪几个,也不知道有多少,但它主要在1到15之间,不应该更多)

如何向其中添加新的随机数,该随机数应尽可能接近该范围,并且将是唯一的(不能与现有数字之一相同)?

它在javascript中,示例数组:

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

这样的函数应该可以工作:

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