【问题标题】:Don't repeat [Math.floor(Math.random()] random number不要重复 [Math.floor(Math.random()] 随机数
【发布时间】:2014-05-07 20:03:06
【问题描述】:

如何避免在这个函数中重复随机数?

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 路径不要重复

谢谢

【问题讨论】:

  • 你的意思是没有重复的随机数?你的问题不清楚imo
  • 您是否总是想使用相同的随机数?或者你期待什么?
  • 创建一个与图片数量相同大小的数组,然后随机Pop(实际上可能是Slice)item,直到数组为空。
  • 太棒了。完全愚蠢的问题,我可能的好答案是“-2”。请提供更多信息,并以更易于理解的方式提问。谢了。
  • 我同意 Jacek 的观点,我不知道为什么人们会忽略他的回答。

标签: jquery html


【解决方案1】:

您可以生成具有所需数字的数组,将其打乱并一个接一个地使用它:

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/

【讨论】:

  • 用 jsfiddle 编辑了我的问题
【解决方案2】:

试试这样:

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

【讨论】:

  • 用 jsfiddle 编辑了我的问题
【解决方案3】:

要简单地不连续获得相同的数字,只需这样做:

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

【讨论】:

  • 它重复了兄弟,我可以问为什么我的问题不赞成?
  • 用 jsfiddle 编辑了我的问题
  • 抱歉,randomImg 超出范围。 See this fiddle。这将使下一张图像与上一张不同。基本上它会执行一个while循环并运行直到randomImg与lastImg不同。如果您想让每个图像都不同,您需要将数字添加到数组中,并检查该数字是否在 while 循环中的数组中。这有帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 2013-03-27
  • 1970-01-01
  • 2014-04-30
相关资源
最近更新 更多