Nybörjarhjälp Javascript Math.floor

Permalänk
Medlem

Nybörjarhjälp Javascript Math.floor

Hej,

Jag har gett mig satan på att lära mig Javascript på egen hand och har basic-begreppen klart för mig. Jag behöver dock lite vägledning med att använda Math.random för att välja ett index ur en array.

Jag vill bygga ett hänga gubbe-spel och välja ett random ord ur en fördefinerad ordlista. Så långt allt gott, men jag får med ett index för mycket (position [5] i exemplet). Inser att det kommer från Math.random * 10 någonstans, men där är jag fast.

Tldr alltså: ibland blir outputen i konsollen:

5 undefined

Tar även gärna tips på om detta går att skriva enklare; den globala wordSelected-boolen känns något bökig.

Tack för hjälp!

//Ord att välja från var wordlist = ["banana", "apple", "pear", "pineapple", "orange"]; var numberGenerator; var wordSelected = false; var selectedWord = " "; while (wordSelected == false) { numberGenerator = Math.floor(Math.random() * 10); if (numberGenerator > wordlist.length) { wordSelected = false; } else { selectedWord = wordlist[numberGenerator]; wordSelected = true; } } console.log(numberGenerator); console.log(selectedWord);

Permalänk
Medlem

Om du alltid vill generera en siffra inom rangen för din array kan du där du just nu skriver 10 sätta wordlist.length. Då blir ditt random nummer i sitt exempel mellan 0-4. Då behöver du inte ha den i en while-loop och behöver inte heller använda wordSelected

Edit: som din kod är just nu så bör du kunna få 5 från din numberGenerator och det är inte större än wordlist.length. Men din array sträcker sig endast till [4] eftersom det startar på 0 så det betyder att programmet kommer krascha.

Edit2: hade inte läst hela tråden tydligen när jag svarade på ovan. Men som ovan så ska du kolla på din if-sats som kollar om den är större än wordlist.length. Den släpper igenom din 5 vilket den inte ska göra enligt förklaringen i edit1.

Permalänk
Medlem
Skrivet av Forsgren:

Om du alltid vill generera en siffra inom rangen för din array kan du där du just nu skriver 10 sätta wordlist.length. Då blir ditt random nummer i sitt exempel mellan 0-4. Då behöver du inte ha den i en while-loop och behöver inte heller använda wordSelected

Edit: som din kod är just nu så bör du kunna få 5 från din numberGenerator och det är inte större än wordlist.length. Men din array sträcker sig endast till [4] eftersom det startar på 0 så det betyder att programmet kommer krascha.

Edit2: hade inte läst hela tråden tydligen när jag svarade på ovan. Men som ovan så ska du kolla på din if-sats som kollar om den är större än wordlist.length. Den släpper igenom din 5 vilket den inte ska göra enligt förklaringen i edit1.

Ahh, att jag inte tänkte på den! Så mycket enklare ju. Stort tack!

Permalänk

While behövs nog inte

const list = ["banana", "apple", "pear", "pineapple", "orange"] const generateRandomWord = (words) => { let generatedNr = Math.floor(Math.random() * list.length); return words[generatedNr] } console.log(generateRandomWord(list))