2012-02-23 3 views
0

Я пытаюсь случайно переключить некоторые изображения в пределах 4 div, но у меня возникают проблемы с повторными результатами. Несмотря на наличие на примереИзбегайте случайных повторных результатов?

1, 4, 2, 3 , а затем 4, 1, 3, 2

Я получаю

2, 2, 4, 2, а затем 1, 3, 3, 4

Так что мне нужно, чтобы найти решение, чтобы избежать повторения чисел

это код

var tempo = setInterval(function() { 
    $('.pub').each(function(i) { 
     var imagens_pubs = ['img_1.jpg', 'img_2.jpg', 'img_3.jpg', 'img_4.jpg']; 
     var rand = Math.floor(Math.random()*imagens_pubs.length); 
     $(this).html('<a href="http://www.mysite.com" target="_blank"><img src="pubs/'+imagens_pubs[rand]+'" width="220px" height="50px"></img></a>'); 
    }); 
}, 5000); 

ответ

1

Это происходит потому, что для каждого .pub, вы выбираете случайный элемент из того же массива. Самый простой способ сделать это - удалить элемент после его выбора, чтобы остановить повторный выбор.

var tempo = setInterval(function() { 
    var imagens_pubs = ['img_1.jpg', 'img_2.jpg', 'img_3.jpg', 'img_4.jpg']; 

    $('.pub').each(function() { 
     var rand = imagens_pubs.splice(Math.floor(Math.random() * imagens_pubs.length), 1)[0]; // Chose a random element and remove it. See the documentation for Array.splice. 

     $(this).html('<a href="http://www.mysite.com" target="_blank"><img src="pubs/' + rand + '" width="220px" height="50px"></img></a>'); 
    }); 
}, 5000);​ 

Примечание мы переместили декларацию imagens_pub из-за each(), в противном случае массив будет повторно объявлена ​​для каждого .pub.

Вы можете видеть это здесь; http://jsfiddle.net/3xcKb/

+0

Вы были быстрее! –

+0

Спасибо за помощь! – Pluda

1

Вы должны посмотреть, как создать произвольную перестановку массива. Алгоритм Knuth shuffle очень просто и легко осуществить:

To shuffle an array a of n elements (indices 0..n-1): 
    for i from n − 1 downto 1 do 
     j ← random integer with 0 ≤ j ≤ i 
     exchange a[j] and a[i] 
Смежные вопросы