Autor Zpráva
WMPopi
Profil
dobrý večer,
lze v js nějak jednoduše promíchat obsah array?

mám řadu čísel po sobě jdoucích např. 1 - 10, není-li na to nějaká funkce, napadlo mě:

1/ udělat cyklus a pomocí Math.random pokaždý vybírat náhodný číslo
2/ zeptat se, jestli už není v poli a pakliže ne, dát ho tam (pokud ano, Math.random opakovat,...)

tím pádem by mi vzniklo pole s deseti čísly, přičemž každý by tam bylo jen jednou :-)

(btw jak se zeptám jestli už poleto číslo obsahuje?)
martindeveloper
Profil
Možná pomůže PHPJS Shuffle.
Laman
Profil
například takto (postupně bere náhodné prvky pole a skládá je to postupně na konec):
pole=new Array(1,2,3,4,5,6) //jakýkoli vstup
for(i=0;i<pole.length-1;i++){
cislo=Math.floor(Math.random()*(pole.length-i))
x=pole[cislo]
pole[cislo]=pole[pole.length-i-1]
pole[pole.length-i-1]=x
}
ah01
Profil
Můžeš použít „trik“ s řazením:
pole.sort(function () { return Math.random() - 0.5 });
WMPopi
Profil
ah01:
vůbec to nechápu, ale to je přesně ono, rychlý, jednoduchý, díky! :-)
Chamurappi
Profil
Reaguji na ah01:
Před rokem jsme tu probírali, že trik se sortem zřejmě nevede k ideálně náhodnému promíchání.
ah01
Profil
Chamurappi:
Matně jsem si pamatoval, že se to tu už někde řešilo, ale nehledal jsem to. Díky za doplnění. Každopádně, nějak to pole zamíchá, takže je spíš otázka na WMPopi, k jakému účelu to potřebuje a jestli má nějaké speciální nároky na „náhodnost“?
WMPopi
Profil
ah01, Chamurappi:
a víte že se mi to zdálo nějak divně náhodně promíchaný? :-D takhle mi to úplně stačí, stačilo jen, aby ty prvky nebyly pokaždý ve stejným pořadí (slouží k animaci obrázků v záhlaví)

ještě jednou dík
_es
Profil
Oveľa zložitejšie ako [#4], na náhodné zamiešanie poľa pole, nie je ani:
for(i = 0, n = pole.length, tmp = new Array(n); i < n; ++i) tmp[i] = pole.splice(Math.floor(Math.random() * (n - i)), 1)[0];
pole = tmp; tmp = void 0;
a to už tie špeciálnejšie podmienky na náhodnosť spĺňa.
ON.
Profil *
ah01:
Můžeš použít ‚trik‘ s řazením

Tento "trik" pro zajímavost použil MS při řazení prohlížečů v ballot screenu, a tak trochu jeho IE končilo na nejhorší pozici :) viz http://www.robweir.com/blog/2010/02/microsoft-random-browser-ballot.html

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: