• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Losowanie w js

Object Storage Arubacloud
+1 głos
912 wizyt
pytanie zadane 17 lipca 2021 w JavaScript przez MSB Nowicjusz (190 p.)
Witam,

Mam pytanie jak zrobić losowanie w JavaScript.

Wiem że można zrobić math.random ale chodzi mi o losowanie i łączenie liter np.:

 

Pierwsze losowanie - F

Drugie - 4

Trzecie - '

Całość - F4'

3 odpowiedzi

0 głosów
odpowiedź 17 lipca 2021 przez VBService Ekspert (253,100 p.)
wybrane 17 lipca 2021 przez MSB
 
Najlepsza

Możesz losować index tablicy.  wink

 

Przykład

<button>Losuj</button>
<pre></pre>
button, pre {
  margin: 1em;
  font: 300 1.05em monospace;
}
button {  
  cursor: pointer;  
}
pre {
  word-spacing: 0.5em;
  line-height: 2em;
}
window.onload = loadedPage;

function loadedPage() {
  const button = document.querySelector('button'),
           msg = document.querySelector('pre');
  
  button.addEventListener('click', () => {
    msg.textContent += randomString();

    const value_in_row = Math.floor(msg.textContent.length / 4) + 1;
    (value_in_row % 15 == 0) ? msg.textContent += '\n': msg.textContent += ' ';
  });
}

function randomString() {
  const letters = [ 'F', 'B', 'D', 'U', 'L', 'R' ],
         digits = [ 1, 2, 3, 4, 5, 6 ],
                //  '   "   !   :
     chars_code = [ 39, 34, 33, 58 ];

  return letters[rnd(letters.length - 1)] +
         `${digits[rnd(digits.length - 1)]}` +
         String.fromCharCode(chars_code[rnd(chars_code.length - 1)]);
}

function rnd(max, min = 0) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

2
komentarz 17 lipca 2021 przez niezalogowany

po co to tak komplikować

function randomItem(array) {
  return array[(Math.random() * array.length) >> 0];
}

const chars = [
  ['F', 'B', 'D', 'U'],
  ['1', '2', '3', '4'],
  [',', ':']
]

const randomString = chars.map(randomItem).join('')

 

1
komentarz 17 lipca 2021 przez VBService Ekspert (253,100 p.)
edycja 18 lipca 2021 przez VBService

Jak już "zapodałeś" temat skracajmy, dalej  wink

function randomString() {
  const rnd = (array) => { return array[(Math.random() * array.length) >> 0]; };
  return [
    [ 'F', 'B', 'D', 'U', 'L', 'R' ],
    [ '1', '2', '3', '4', '5', '6' ],
    [ '\"', '\'', '!',':' ]
  ].map(rnd).join('');
}

 

[ edit ]

wink

randomString=(a,c)=>a[(r=n=>0|Math.random()*n)(6)]+(r(6)+1)+c[r(4)]

67 znaków

lub

s=(a,c)=>a[(r=n=>0|Math.random()*n)(6)]+(r(6)+1)+c[r(4)]

56 znaków

console.log(s('FBDULR',`"'!:`))

 

3
komentarz 17 lipca 2021 przez niezalogowany

Wyzwanie przyjęte

randomString=_=>'FBDULR'[(r=n=>0|Math.random()*n)(6)]+(r(6)+1)+`"'!:`[r(4)]

75 znaków

komentarz 17 lipca 2021 przez MSB Nowicjusz (190 p.)

@.::VBService::., jak mam zrobić tak żeby po kliknięciu generowało się tyle stringów ile jest podane w inpucie?

 

<input type=’text’> <!--<—— w tym inpucie podaje się liczbę stringów-->

 

+2 głosów
odpowiedź 17 lipca 2021 przez ScriptyChris Mędrzec (190,190 p.)

Możesz pobawić się metodą String.fromCharCode, przekazując jej losowe liczby z przedziału od 0 - 65535.

Przykładowo, żeby otrzymać string "F4'":

String.fromCharCode(70, 52, 39); // F4'

 

komentarz 17 lipca 2021 przez MSB Nowicjusz (190 p.)
Chodzi mi o to że mam 3 tablice

Pierwsza - [F, B, D, U, L, R]

Druga - [1, 2, 3, 4, 5, 6]

Trzecia - [', ", !, :]

I z każdej losóję po jednym znaku
1
komentarz 17 lipca 2021 przez ScriptyChris Mędrzec (190,190 p.)

Wylosuj po jednym znaku z każdej tablicy, wrzuć te znaki do osobnej tablicy i przekaż ją do metody String.fromCharCode - wspomóż się tutaj albo spread operatorem albo użyj Function.prototype.apply, bo String.fromCharCode oczekuje listy parametrów, a nie tablicy.

0 głosów
odpowiedź 17 lipca 2021 przez VBService Ekspert (253,100 p.)

Można też przez "mieszanie zawartości" (shuffle) tablicy.  wink

 

Przykład

<button>Losuj</button>
<pre></pre>
button, pre {
  margin: 1em;
  font: 300 1.05em monospace;
}
button {  
  cursor: pointer;  
}
pre {
  word-spacing: 0.5em;
  line-height: 2em;
}
window.onload = loadedPage;
 
function loadedPage() {
  const button = document.querySelector('button'),
           msg = document.querySelector('pre');
   
  button.addEventListener('click', () => {
    msg.textContent += randomString();
 
    const value_in_row = Math.floor(msg.textContent.length / 4) + 1;
    (value_in_row % 15 == 0) ? msg.textContent += '\n': msg.textContent += ' ';
  });
}
 
function randomString() {
  const letters = [ 'F', 'B', 'D', 'U', 'L', 'R' ],
         digits = [ 1, 2, 3, 4, 5, 6 ],
                //  '   "   !   :
     chars_code = [ 39, 34, 33, 58 ];
  
  return shuffle(letters) + shuffle(digits,1).toString() +
         String.fromCharCode(shuffle(chars_code));
}

function shuffle(arr, index = 0) {
  arr.sort(() => Math.random() - 0.5);
  if (index > arr.length - 1) index = arr.length - 1;
  if (index < 0) index = 0;
  return arr[index]; // domyślnie indeks zero
}

komentarz 17 lipca 2021 przez VBService Ekspert (253,100 p.)

Tablice

digits = [ 1, 2, 3, 4, 5, 6 ]

można pominąć, jeżeli to są kolejne liczby z zadanego zakresu

window.onload = loadedPage;
  
function loadedPage() {
  const button = document.querySelector('button'),
           msg = document.querySelector('pre');
    
  button.addEventListener('click', () => {
    msg.textContent += randomString();
  
    const value_in_row = Math.floor(msg.textContent.length / 4) + 1;
    (value_in_row % 15 == 0) ? msg.textContent += '\n': msg.textContent += ' ';
  });
}
  
function randomString() {
  const letters = [ 'F', 'B', 'D', 'U', 'L', 'R' ],
                //  '   "   !   :
     chars_code = [ 39, 34, 33, 58 ];
   
  return shuffle(letters) + rnd(6).toString() +
         String.fromCharCode(shuffle(chars_code,1));
}
 
function shuffle(arr, index = 0) {
  arr.sort(() => Math.random() - 0.5);
  if (index > arr.length - 1) index = arr.length - 1;
  if (index < 0) index = 0;
  return arr[index]; // domyślnie indeks zero
}
function rnd(max, min = 1) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

 

Podobne pytania

+1 głos
2 odpowiedzi 1,015 wizyt
pytanie zadane 1 października 2020 w JavaScript przez Nowacx02 Obywatel (1,060 p.)
+2 głosów
3 odpowiedzi 433 wizyt
+2 głosów
3 odpowiedzi 631 wizyt
pytanie zadane 25 sierpnia 2020 w JavaScript przez Ezry Nowicjusz (170 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...