Autor | Zpráva | ||
---|---|---|---|
WMPopi Profil |
#1 · Zasláno: 6. 6. 2010, 21:46:56
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 |
#2 · Zasláno: 6. 6. 2010, 21:54:02
Možná pomůže PHPJS Shuffle.
|
||
Laman Profil |
#3 · Zasláno: 6. 6. 2010, 22:08:21
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 |
#4 · Zasláno: 6. 6. 2010, 22:09:05
Můžeš použít „trik“ s řazením:
pole.sort(function () { return Math.random() - 0.5 }); |
||
WMPopi Profil |
#5 · Zasláno: 6. 6. 2010, 22:38:08
ah01:
vůbec to nechápu, ale to je přesně ono, rychlý, jednoduchý, díky! :-) |
||
Chamurappi Profil |
#6 · Zasláno: 6. 6. 2010, 23:40:31
Reaguji na ah01:
Před rokem jsme tu probírali, že trik se sort em zřejmě nevede k ideálně náhodnému promíchání.
|
||
ah01 Profil |
#7 · Zasláno: 7. 6. 2010, 00:36:52
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 |
#8 · Zasláno: 7. 6. 2010, 00:48:05
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 |
#9 · Zasláno: 7. 6. 2010, 03:30:38
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; |
||
Časová prodleva: 9 dní
|
|||
ON. Profil * |
#10 · Zasláno: 16. 6. 2010, 14:25:31
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 |
||
Časová prodleva: 14 let
|
0