向数组添加新的唯一编号
Adding new unique number to the array
我有一个由几个随机数组成的数组(我不知道会是哪几个,也不知道有多少,但它主要在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]
[...]
相关文章:
- 使用onkeyup JS事件检查输入的值是否唯一
- 当同一浏览器的两个实例浏览时,Javascript页面如何具有唯一的ID
- 在jquery中生成一个自动前缀编号
- Lodash映射并返回唯一
- Jquery 读取编号组中选择下拉列表的数组
- 在数据库中循环值时,为输入框获取唯一值
- JQuery幻灯片,可点击编号位置
- 如何从数组中查找唯一对象
- 正在为循环创建唯一id
- 获取唯一值并使用javascript计算金额总和
- Javascript时间戳编号不是唯一的
- 使用 YUI 动态获取班级的唯一编号
- 自动为PDF下载添加唯一编号
- angular.js中唯一的文本框编号
- jQuery为dom元素提供了唯一的编号
- HTML表单编号类型唯一的用户输入与Javascript和PHP
- HTML表单编号类型唯一用户输入
- 向数组添加新的唯一编号
- 如何使用jquery/javascript为html中的ID列生成和分配唯一编号
- 为ng-repeat返回的每个项添加唯一的编号