Jak mogę utworzyć tablicę z 40 elementami, z losowymi wartościami od 0 do 39? Lubić
[4, 23, 7, 39, 19, 0, 9, 14, ...]
Próbowałem użyć rozwiązań stąd:
http://freewebdesigntutorials.com/javaScriptTutorials/jsArrayObject/randomizeArrayElements.htm
ale tablica, którą otrzymuję, jest bardzo mało zrandomizowana. Generuje bardzo dużo bloków kolejnych liczb ...
javascript
arrays
random
Alexandra
źródło
źródło
źródło
[...Array(40)].map(_=>Math.ceil(Math.random()*40));
byłoby 11 znaków mniej niż twoje i 7 mniej niż oryginał.Math.ceil
, chociaż wycinamy 0 jako opcję. Jeśli możemy zaakceptować 1-40 zamiast 0-39, to działa. W przeciwnym razie , zmniejsz charakter poprawy, aby wrócić doMath.floor
)ES5:
ES6:
źródło
_
ii
? niepotrzebne w ES6, chyba że się mylę._
jest bieżącym elementem ii
jest bieżącym indeksem. Masz rację, w obu przypadkach są niepotrzebne. Możesz je usunąć, jeśli chcesz.Jeszcze krótsze podejście ES6:
Możesz także mieć funkcję z argumentami:
źródło
.fill()
bez żadnego parametru zapełni tablicęundefined
, co jest jedyną potrzebną rzeczą tutaj.map()
do pracyNajkrótsza :-)
[...Array(40)].map(e=>~~(Math.random()*40))
źródło
~~
jest skrótem dla Math.floor~~
skrótu? (edytuj: ahh, widzę , że to tylko operator bitowy )Math.random()
zwróci liczbę od 0 do 1 (wyłącznie). Tak więc, jeśli chcesz, aby 0-40, możesz pomnożyć to przez 40, najwyższy wynik, jaki kiedykolwiek uzyskasz, to mnożenie przez.http://jsfiddle.net/robert/tUW89/
źródło
Sekwencje losowych przedmiotów często zawierają bloki kolejnych liczb, zobacz błąd Hazardzisty . Na przykład:
źródło
ograniczył tablicę do 6 wartości, aby była łatwa do zobaczenia.
źródło
Ponieważ zakres liczb jest ograniczony, powiedziałbym, że najlepszą rzeczą do zrobienia jest wygenerowanie tablicy, wypełnienie jej liczbami od 0 do 39 (w kolejności), a następnie przetasowanie.
źródło
Math.random()
sprawę , ale da nieco inne wyniki niż w przypadku użycia 40 razy, ponieważ wymusi to, że każda liczba pojawi się raz i nie będzie się powtarzać.Powyżej jest to tradycyjny sposób, ale ja drugi raz @Pointy i @Phrogz, jeśli chcesz uniknąć duplikatów w swojej tablicy bez konieczności wykonywania kosztownych obliczeń
źródło
Dziwaczne rozwiązania jednoliniowe na co dzień.
Wartości w tablicach są całkowicie losowe, więc kiedy będziesz używać tych fragmentów, będzie inaczej.
Tablica (długość 10) z losowymi znakami małymi literami
Tablica (długość 10) z losowymi liczbami całkowitymi od 0 do 99
Tablica losowych dat (od 10 lat wstecz do teraz)
Tablica (długość 10) losowych ciągów
Inne przydatne rzeczy, które możesz znaleźć tutaj https://github.com/setivolkylany/nodejs-utils/blob/master/utils/faker.js
źródło
Korzystając z kilku nowych funkcji ES6, można to teraz osiągnąć za pomocą:
Zwróć uwagę, że to rozwiązanie będzie działać tylko w nowoczesnych przeglądarkach obsługujących te funkcje ES6: funkcje strzałek i Array.from ().
źródło
Zobacz poniżej: -
źródło
ze strony sugerowanej przez @Phrogz
źródło
Potrzebowałem czegoś nieco innego niż to, co dały te rozwiązania, ponieważ musiałem utworzyć tablicę z wieloma różnymi liczbami losowymi przechowywanymi w określonym zakresie. Poniżej moje rozwiązanie.
Wolałbym nie tworzyć pętli, która może zakończyć się dużą liczbą niepotrzebnych połączeń (jeśli liczba i zasięg są wysokie i są zbliżone do tej samej liczby), ale to najlepsze, co mogłem wymyślić.
źródło
Myślę, że ta metoda rozwiąże problem z prawdopodobieństwami ograniczonymi tylko przez generator liczb losowych.
źródło
Jeśli potrzebujesz go z losowymi unikalnymi wartościami z 0 ... zakresu długości:
źródło
Jestem prawie pewien, że jest to najkrótszy sposób na utworzenie losowej tablicy bez żadnych powtórzeń
źródło
keys
funkcjiArray.from(Array(40).keys()).sort(_ => Math.random() - .5)
:? Możesz nawet oszaleć i użyć operatora spreadu! Ale to jest teraz dla mnie zbyt ekscytujące.Trochę późno na imprezę, ale używam randojs.com do przypadkowości, ponieważ sprawia, że takie rzeczy są bardzo łatwe. Możesz otrzymać losowo potasowaną tablicę liczb od 0 do 39, tak jak to:
Bez kłopotów z logistyką wszystkiego - dodatkowo jest super czytelny i łatwy do zrozumienia :)
źródło
Generatory
Tablica o długości 40 z 40 losowymi możliwymi wartościami (0 - 39) bez powtarzających się wartości jest lepsza do przetasowania, jak wyjaśniają @Phrogz i @Jared Beck. Innym podejściem, tylko dla zapisów, może być użycie generatorów. Ale to podejście jest mało wydajne w porównaniu z innymi proponowanymi rozwiązaniami .
źródło