Javascript 用唯一的随机数填充数组
我有一个数组:Javascript 用唯一的随机数填充数组,javascript,arrays,random,Javascript,Arrays,Random,我有一个数组: var array = new Array(); 这里是随机函数,它给出了一个介于min和max之间的随机数(见前面的Stackoverflow主题): 这个数组应该有9个单元格。我想用随机数填充它,重要的条件是这些数字中的每一个都是唯一的,这意味着在这个数组中找不到两次或更多的数字。因此,最后,这里是我遇到的问题(完整代码): var数组=新数组(); 函数randomIntFromInterval(最小值、最大值){ 返回Math.floor(Math.random()*(
var array = new Array();
这里是随机函数,它给出了一个介于min
和max
之间的随机数(见前面的Stackoverflow主题):
这个数组应该有9个单元格。我想用随机数填充它,重要的条件是这些数字中的每一个都是唯一的,这意味着在这个数组中找不到两次或更多的数字。因此,最后,这里是我遇到的问题(完整代码):
var数组=新数组();
函数randomIntFromInterval(最小值、最大值){
返回Math.floor(Math.random()*(max-min+1)+min);
}
//用9个不同的变量填充变量“array”
//随机数
函数randomlyInitializeArray(){
var random=0;
//对于我的“数组”中的每个单元格(9个单元格)
对于(变量i=0;i
那么,用9个唯一(不同)的数字填充数组的逻辑是什么呢?那么您想要1-9中的9个随机唯一数字?在我看来,这就像是希望数字1到9以随机顺序排列一样 这可以通过以下简单方法实现:
[1,2,3,4,5,6,7,8,9].sort(function () { // shuffle
return Math.random() - 0.5; // returns > 0 ~50% of the time
});
否则,您可以执行以下操作:
var array = [];
while (array.length < 9) {
array = array_unique(array.concat([ get_random_number() ]);
}
console.log(array);
var数组=[];
while(数组长度<9){
array=array_unique(array.concat([get_random_number()]);
}
console.log(数组);
大多数框架都有一个独特的array\u
函数,或者只编写自己的函数
有更快的方法可以做到这一点,但是显式地包含对
unique()
的调用使得这个实现易于理解和验证。如果您想从特定的间隔(使用该函数)中获取9个随机数:
您可以使用do while
循环来获取随机数,直到得到唯一的数字
您可以通过contains()
函数检查数组中是否已有数字
for (var i = 0; i < maxLength; i++) {
do {
random = randomIntFromInterval(1, maxLength);
while( array.contains(random) ); // will return false if random isn't asigned
array.push(random);
}
洗牌方法取自我建议使用
while
循环,类似
function unique_nums(n) {
var myarray = [];
for (var i=0;i<n;i++){
var next_num = Math.random();
while (myarray.indexOf(next_num) !== -1) {
next_num = Math.random();
}
myarray.push(next_num);
}
return myarray;
}
function unique\u nums(n){
var myarray=[];
对于(var i=0;i为什么不获取从1到-max的数组,然后将其洗牌
/+Jonas Raoni Soares Silva
//@ http://jsfromhell.com/array/shuffle [v1.0]
函数shuffle(o){//v1.0
对于(var j,x,i=o.length;i;j=Math.floor(Math.random()*i),x=o[--i],o[i]=o[j],o[j]=x);
返回o;
};
函数randomIntFromInterval(最小值、最大值){
返回Math.floor(Math.random()*(max-min+1)+min);
}
//用9个不同的变量填充变量“array”
//随机数
函数随机初始化array(最小值、最大值){
var启动=分钟;
var randomMax=randomIntFromInterval(最小值,最大值)
var myArray=[];
对于(var i=0;开始用1,2,3…9填充它,然后。谢谢你,这个例子非常适合我的应用程序,所以竖起大拇指!@Zeratops你可以随时向上投票你觉得有用的答案,而不是在评论中说谢谢谢谢谢谢你的时间,我理解你的解决方案!我刚刚意识到我误读了你的问题,并将它变成了from最小到最大的随机数不是1-9,但我会让它保持这样,因为它可以很容易地从1-9通过传递1和9到随机初始化array
是的,我只需要更改你的值,算法对我来说很清楚再次感谢:)谢谢你回答棍子,但我更喜欢shuffle()方法,因为它更适合我的需要。
for (var i = 0; i < maxLength; i++) {
do {
random = randomIntFromInterval(1, maxLength);
while( array.contains(random) ); // will return false if random isn't asigned
array.push(random);
}
var myArray = ['1','2','3','4','5','6','7','8','9'];
newArray = shuffle(myArray);
function shuffle(o){
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
function unique_nums(n) {
var myarray = [];
for (var i=0;i<n;i++){
var next_num = Math.random();
while (myarray.indexOf(next_num) !== -1) {
next_num = Math.random();
}
myarray.push(next_num);
}
return myarray;
}