javascript - Comment générer un ensemble de nombres aléatoires à six chiffres non répétitifs
过去多啦不再A梦
过去多啦不再A梦 2017-05-19 10:39:10
0
6
1397

Il est nécessaire de générer un tableau contenant six nombres aléatoires, et ces nombres aléatoires ne peuvent pas être répétés.
(Le tableau contient plusieurs nombres aléatoires, chaque nombre aléatoire comporte six chiffres et les nombres aléatoires du tableau ne sont pas répétés)

Vous pouvez vous référer aux deux codes suivants et combiner les deux.

//随机六位数
function MathRand()
{
    var Num="";
    for(var i=0;i<6;i++)
    {
        Num+=Math.floor(Math.random()*10);
    }
}
//不重复随机数组
/*  num 要产生多少个随机数
    from 产生随机数的最小值
    to 产生随机数的最大值   */
function createRandom(num ,from ,to )
{
    var arr=[];
    for(var i=from;i<=to;i++)
        arr.push(i);
    arr.sort(function(){
        return 0.5-Math.random();
    });
    arr.length=num;
    return arr;
}
 
function createRandom2(num , from , to)
{
    var arr=[];
    var json={};
    while(arr.length<num)
    {
        //产生单个随机数
        var ranNum=Math.ceil(Math.random()*(to-from))+from;
        //通过判断json对象的索引值是否存在 来标记 是否重复
        if(!json[ranNum])
        {
            json[ranNum]=1;
            arr.push(ranNum);
        }
         
    }
    return arr;
     
     
}
alert(createRandom2(10,0,50));//生成10个从0-50之间不重复的随机数
过去多啦不再A梦
过去多啦不再A梦

répondre à tous(6)
曾经蜡笔没有小新

Cela peut être fait via une récursion. Pour faciliter la démonstration, je l'ai modifié pour générer un ensemble de nombres aléatoires entiers positifs non répétitifs dans la limite de 10.
La méthode principale sur laquelle il s'appuie est la méthode indexOf(), qui est utilisée pour trouver l'index d'une certaine valeur dans le tableau. Si elle n'est pas trouvée dans le tableau, -1 est renvoyé.
Le code est le suivant :

var arr=[];
function getRandom(){
    var random=Math.floor(Math.random()*1000000);
    console.log(random);
    //判断生成的数在数组中是否存在,判断是否是6位数
    //如果不存在而且是6位数,放入数组
    if(random.toString().length==6&&arr.indexOf(random)==-1){     
        arr.push(random)
    }else{
    //如果存在或者不是6位数,接着调用这个函数,生成满足要求的随机数
        console.log("不符合要求的"+random)
        getRandom();
    }
}
for(var i=0;i<6;i++){
    getRandom();
}
console.log(arr);
世界只因有你

Le temps ne se répétera pas et l'utilisation d'horodatages pour générer des nombres aléatoires ne se répétera pas non plus.

console.log((Math.random() * Date.now()).toFixed(0));
// 6位的
console.log((Math.random() * Date.now() / 1000000).toFixed(0));

Et dans une certaine mesure, il n'y a pas de nombre aléatoire absolu non répétitif dans ce monde, et toutes les combinaisons ne sont pas infinies même si tous les nombres aléatoires générés sont stockés, puis comparés une fois générés, s'ils existent déjà. , ils seront générés. De nouveaux nombres aléatoires finiront par former une boucle infinie lorsque toutes les combinaisons auront été essayées. De plus, il ne comporte que 6 chiffres et il n'y a que 472 392 combinaisons au total.

仅有的幸福

Permettez-moi de vous en donner un simple et facile à utiliser. Ce qui précède ne peut garantir qu'il ne se répétera jamais. S'il se répète, n'oubliez pas d'acheter un billet de loterie. Math.random().toString(36).slice(2,8)

黄舟

Algorithme de génération de séquences de nombres aléatoires non répétitifs
J'ai vu un article assez intelligent Les résultats et l'efficacité peuvent être garantis Utilisez du code + des commentaires pour l'implémenter :

.
function getRandom(numCount) {
        var numList = [];
        var numMin = 100000;
        var numMax = 999999;
        var listLen = numMax - numMin + 1;

        var outPut = [];

        // 将所有数顺序装填到数字列表中
        for (var i = numMin; i < numMax + 1; i++) {
            numList.push(i);
        }

        var randNum;
        for (var j = 0; j < numCount; j++) {
            // 产生一个小于列表长度的随机数randNum
            randNum = Math.floor(Math.random() * listLen);
            // 将列表的第randNum项输出
            outPut.push(numList[randNum]);
            // 将列表的最后一项替换到刚被取出的数的位置
            numList[randNum] = numList[listLen - 1];
            // 列表长度减一,即列表最后一项不会再被取到;
            listLen--;
        }

        return outPut;
    }
    var arr = getRandom(30);
    console.log(arr);

JS n'est pas bien écrit (escape

黄舟

Écrivez une boucle pour générer un nombre aléatoire à chaque fois et jetez-le dans l'ensemble lorsque l'ensemble est suffisamment long, il sera converti en tableau et renvoyé

.
伊谢尔伦

Si le nombre requis dans le tableau est petit, vous pouvez utiliser la méthode du tableau pour le déterminer

console.time('time:');
function createRandomArr(l){
    var r = [];
    var o = {};
    var a;
    for (var i = 0;i < l;i++){
        a = Math.random().toString().slice(2,8);
        o[a] ? i-- : (r.push(a),o[a] = true);
    }
    return r;
}
var res = createRandomArr(10000);
console.log(res,res.length);
console.timeEnd("time:");
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!