如何避免在此功能中重复随机数?
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';
My question
我需要在每个图像上使用不同的src路径,但img src路径不要重复
由于
答案 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);
});
}