Javascript 用不重复的随机数填充数组
因此,我有一个名为Javascript 用不重复的随机数填充数组,javascript,arrays,Javascript,Arrays,因此,我有一个名为arr的数组 我想用四个随机数填充它: for (var i = 0; i < 4; i++) { arr[i] = Math.floor(Math.random() * 10); } for(变量i=0;i
arr
的数组
我想用四个随机数填充它:
for (var i = 0; i < 4; i++) {
arr[i] = Math.floor(Math.random() * 10);
}
for(变量i=0;i<4;i++){
arr[i]=Math.floor(Math.random()*10);
}
如果返回值[4、2、3、4]
。如何检查重复项,并重新计算不等于数组中已存在的任何其他值的随机数
另外,若有更好的方法来实现这一点,我也很想学习/了解这种方法。你们要寻找的是一种从整数数组[0..9]中随机抽取样本的方法。您可以使用几种算法来实现这一点,例如一种简单的算法 此外,如果有更好的方法来实现这一点,我也很想学习/了解这种方法 有 如果需要唯一值,请生成一个规则的顺序数组[1,2,3,4](或所需的长度),然后使用该数组填充第二个数组,方法是依次从第一个数组中提取随机元素(从而增加数组2,缩小数组1):
var a1=[];
对于(var i=0;i如果你想要一个数组,它包含任意数量的从1到n的随机顺序的数字,我认为更可行的方法是生成一个包含所有从1到n的数字的数组,然后按照描述的方式将其洗牌
然后,可以在洗牌后继续拼接阵列,以将其缩短到所需的长度
这两个步骤都有O(1)或O(n)的复杂性,这比测试每次插入或修改从中提取数字的值池要好得多。我可能会为循环创建一个函数
function getNumber(arr){
var num = Math.floor(Math.random() * 10);
if(arr.indexOf(num) < 0){
return num;
} else {
getNumber(arr);
};
};
函数getNumber(arr){
var num=Math.floor(Math.random()*10);
if(arr.indexOf(num)<0){
返回num;
}否则{
getNumber(arr);
};
};
然后你会做:
var arr = [];
for (var i = 0; i < 4; i++) {
arr[i] = getNumber(arr);
}
var arr=[];
对于(变量i=0;i<4;i++){
arr[i]=getNumber(arr);
}
Hi,我只想指出,这个解决方案不是很有效。如果你要生成大型阵列,这个解决方案需要O(N^2)
时间,而最佳的是O(N)
。如果没有指向其他解决方案的链接,这不是一个非常有用的说法,因为已经在SO或整个web上=)实际上,作为一个O(N²)算法您不希望对长序列使用该算法,但“long”是相对的;在我的电脑上,数字是1000~10ms和10000~80ms,这两个数字都可以说是如此之大,以至于你不想编写自己的代码,但你只想使用组合数学库,因为你在“任意数据”的土地上。我相信LWCRIS和我自己的答案都是O(N)
算法,与此相反,它是O(N^2)
。这个问题问的是实际的操作方式,而不是图书馆:)
var arr = [];
for (var i = 0; i < 4; i++) {
arr[i] = getNumber(arr);
}