不要重复[Math.floor(Math.random()]随机数

时间:2014-03-28 11:23:05

标签: jquery html

如何避免在此功能中重复随机数?

Demo

var maxImg = 15; 
function hexImgName() {
    var imgSRC = '';
    $(".hexagon-img img").each(function (i) {
        var randomImg = Math.floor(Math.random() * maxImg) + 1; //generate a random number from 0 to 10
        imgSRC = 'img/hex/pic-' + randomImg + '.gif';
        $(this).attr('src', imgSRC);
    });
}

我的文件夹中有15张图片名称为pic-1.gif,pic-2.gif,pic-3.gif ... pic-15.gif

我正在通过jQuery img/hex/pic-' + randomImg + '.gif';

更改img src路径
My question

我需要在每个图像上使用不同的src路径,但img src路径不要重复

由于

3 个答案:

答案 0 :(得分:3)

您可以生成一个包含所需数字的数组,将其随机播放并使用它的数字:

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

var maxImg = 15;
for (var i = maxImg, a=[]; i--;) a.push(i);
shuffle(a);

function hexImgName() {
    var pos = 0;
    var imgSRC = '';
    $(".hexagon-img img").each(function (i) {
        var randomImg = a[pos++];
        imgSRC = 'img/hex/pic-' + randomImg + '.gif';
        $(this).attr('src', imgSRC);
    });
}

您可以在此处查看JSFiddle的更新版本 - http://jsfiddle.net/LELGE/26/

答案 1 :(得分:1)

试试这样:

var grabBag = [1,2,3,4,5,6,7,8,9,10];

// randomize order of elements with a sort function that randomly returns -1/0/1
grabBag.sort(function(xx,yy){ return Math.floor(Math.random() * 3) - 1; })

function getNextRandom(){
    return grabBag.shift();
};

var originalLength = grabBag.length;
for(var i = 0; i < originalLength .length; i++){
    console.log(getNextRandom());
}

答案 2 :(得分:1)

如果没有连续获得相同的数字,请执行以下操作:

var maxImg = 15; 
var lastImg;
function hexImgName() {
    var imgSRC = '';
    $(".hexagon-img img").each(function (i) {
        var randomImg = Math.floor(Math.random() * maxImg) + 1; //generate a random number from 0 to 10;
        while (lastImg==randomImg) {
           randomImg = Math.floor(Math.random() * maxImg) + 1; //generate a random number from 0 to 10;           
        }
        lastImg=randomImg;
        imgSRC = 'img/hex/pic-' + randomImg + '.gif';
        $(this).attr('src', imgSRC);
    });
}