Bagaimana cara membuat array dengan 40 elemen, dengan nilai acak dari 0 hingga 39? Suka
[4, 23, 7, 39, 19, 0, 9, 14, ...]
Saya mencoba menggunakan solusi dari sini:
http://freewebdesigntutorials.com/javaScriptTutorials/jsArrayObject/randomizeArrayElements.htm
tetapi array yang saya dapatkan sangat sedikit diacak. Ini menghasilkan banyak blok angka berurutan ...
javascript
arrays
random
Alexandra
sumber
sumber
sumber
[...Array(40)].map(_=>Math.ceil(Math.random()*40));
akan menjadi 11 karakter lebih sedikit dari Anda, dan 7 lebih sedikit dari aslinya.Math.ceil
, meskipun kami memotong 0 sebagai opsi. Jika kami dapat menerima 1-40 daripada 0-39, ini berfungsi. , kurangi karakter peningkatan untuk kembali keMath.floor
)ES5:
ES6:
sumber
_
dani
? tidak perlu di ES6 kecuali saya salah._
adalah elemen saat ini dani
merupakan indeks saat ini. Anda benar, mereka tidak diperlukan dalam kedua kasus tersebut. Anda dapat menghapusnya jika Anda suka.Pendekatan ES6 yang lebih pendek:
Selain itu, Anda dapat memiliki fungsi dengan argumen:
sumber
.fill()
tanpa parameter apa pun akan mengisi array denganundefined
, yang merupakan satu-satunya hal yang diperlukan di sini.map()
agar berfungsiTerpendek :-)
[...Array(40)].map(e=>~~(Math.random()*40))
sumber
~~
adalah singkatan dari Math.floor~~
singkatan itu? (edit: ahh, itu hanya operator bitwise , saya mengerti)Math.random()
akan mengembalikan angka antara 0 dan 1 (eksklusif). Jadi, jika Anda ingin 0-40, Anda dapat mengalikannya dengan 40, hasil yang paling tinggi adalah hasil perkalian Anda.http://jsfiddle.net/robert/tUW89/
sumber
Urutan item acak sering kali berisi blok nomor berurutan, lihat Kekeliruan Penjudi . Sebagai contoh:
sumber
membatasi larik menjadi 6 nilai agar mudah dilihat.
sumber
Karena kisaran angka dibatasi, saya akan mengatakan hal terbaik untuk dilakukan adalah menghasilkan array, mengisinya dengan angka nol hingga 39 (secara berurutan), lalu mengocoknya.
sumber
Math.random()
40 kali, karena ini akan memaksa setiap nomor muncul sekali dan tidak ada pengulangan.Ini di atas adalah cara tradisional untuk melakukannya tetapi saya kedua @Pointy dan @Phrogz jika Anda ingin menghindari duplikat dalam array Anda tanpa harus melakukan komputasi yang mahal
sumber
Buat solusi satu baris unik setiap hari.
Nilai dalam array adalah acak total, jadi ketika Anda akan menggunakan potongan ini, itu akan berbeda.
Larik (panjang 10) dengan karakter acak dalam huruf kecil
Larik (panjang 10) dengan bilangan bulat acak dari 0 hingga 99
Tanggal acak array (dari 10 tahun lalu hingga sekarang)
Sebuah array (panjang 10) string acak
Hal berguna lainnya yang dapat Anda temukan di sini https://github.com/setivolkylany/nodejs-utils/blob/master/utils/faker.js
sumber
Menggunakan beberapa fitur ES6 baru, ini sekarang dapat dicapai dengan menggunakan:
Perhatikan bahwa solusi ini hanya akan berfungsi di browser modern yang mendukung fitur ES6 ini: fungsi panah dan Array.from ().
sumber
Lihat di bawah: -
sumber
dari halaman yang disarankan oleh @Phrogz
sumber
Saya membutuhkan sesuatu yang sedikit berbeda dari apa yang diberikan solusi ini, karena saya perlu membuat array dengan sejumlah angka acak berbeda yang dipegang pada kisaran tertentu. Di bawah ini adalah solusi saya.
Saya lebih suka untuk tidak membuat loop yang memiliki kemungkinan untuk berakhir dengan banyak panggilan yang tidak perlu (jika hitungan Anda, dan jangkauannya tinggi dan dekat dengan nomor yang sama) tetapi ini adalah yang terbaik yang bisa saya dapatkan.
sumber
Saya kira metode ini akan menyelesaikan masalah dengan probabilitas, hanya dibatasi oleh generator angka acak.
sumber
Jika Anda membutuhkannya dengan nilai unik acak dari 0 ... rentang panjang:
sumber
Saya cukup yakin bahwa ini adalah cara terpendek untuk membuat array acak Anda tanpa pengulangan
sumber
keys
fungsiArray.from(Array(40).keys()).sort(_ => Math.random() - .5)
:? Anda bahkan mungkin menjadi gila, dan menggunakan operator penyebaran! Tapi itu terlalu mengasyikkan bagiku sekarang.Agak terlambat ke pesta, tapi saya menggunakan randojs.com untuk keacakan karena membuat hal-hal seperti ini sangat mudah. Anda bisa mendapatkan deretan angka yang diacak secara acak dari 0 hingga 39 seperti ini:
Tidak ada masalah dengan logistik semuanya - plus itu sangat mudah dibaca dan mudah dimengerti :)
sumber
Generator
Sebuah array dengan panjang 40 dari 40 nilai kemungkinan acak (0 - 39) tanpa nilai pengulangan lebih baik untuk diacak seperti yang dijelaskan @Phrogz dan @Jared Beck. Pendekatan lain, hanya untuk catatan, bisa menggunakan generator. Tetapi pendekatan ini kurang memiliki kinerja dibandingkan dengan solusi lain yang diusulkan .
sumber