Forum Webscript.Ru

Программирование => JavaScript & JScript => Тема начата: MASe от 19 Марта 2002, 17:37:23

Название: выбор ссылки из массива
Отправлено: MASe от 19 Марта 2002, 17:37:23
как то раз уже спрашивал здесь по этому поводу...
нужен был скрипт, хранящий в себе массив ссылок и выдающий по три случайных... причем ни одна из этих трех не должна по идее повторяться...
кручу, верчу, меняю... а все равно происходят эти повторения....
кто знает почему??? и что тут некорректно???

var links=new Array();
links[0] = "Picture#0";
links[1] = "Picture#1";
links[2] = "Picture#2";
links[3] = "Picture#3";
links[4] = "Picture#4";
links[5] = "Picture#5";
links[6] = "Picture#6";
links[7] = "Picture#7";
links[8] = "Picture#8";
links[9] = "Picture#9";
var linksprint = Array();
function check(n)
{
for(k=0;k{
if (n== linksprint[k]) { return false;}
}
}
linksprint[0]=links[Math.round(9*Math.random())];
linksprint[1]=links[Math.round(9*Math.random())];
while(check(linksprint[1]==false)) {linksprint[1]=links[Math.round(9*Math.random())];}
linksprint[2]=links[Math.round(9*Math.random())];
while(check(linksprint[2]==false)) {linksprint[2]=links[Math.round(9*Math.random())];}
document.write(\'
\');
document.write("

"+linksprint[0]+"


");
document.write(linksprint[1]+"


");
document.write(linksprint[2]+"


");
document.write(\'
\');
Название: выбор ссылки из массива
Отправлено: Боря Елкин от 19 Марта 2002, 20:33:58
Немного попытался по разбираться в алгоритме, но так и не въехал (быстро надоело).

В свое время, когда еще учился, часто нужно было что-то случайно выбирать без повторений. Ну и родился примерно такой алгоритм.

var n=40; //количество итераций
for (var i=0; i<=n; i++){
    var x1=Math.round(links.length*Math.random());
    var x2=Math.round(links.length*Math.random());
    if (x1!=x2){
         меняем местами значения links[x1] и links[x2]
    }
}

выводим первые 3 (или сколько надо ссылок)

Чем больше количество итераций, тем лучше перемешается массив. 100% не будет повторений.
Название: Вот рабочий вариант:
Отправлено: puh от 19 Марта 2002, 20:53:14





----------------
А вообще не рекомендую ставить переменную links[], так как имеется свойство document.links, возможны зависания...
Назови ее проще - a, например.
Название: спасибки!
Отправлено: MASe от 20 Марта 2002, 10:23:13
буду эксперементировать ;-))