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;
}