Как обращаться с math.random, когда есть несколько массивов? - PullRequest
1 голос
/ 22 февраля 2020

У меня есть четыре массива - цветы, деревья, твари и песни.

У меня есть четыре соответствующие функции - flower (), tree (), critter () и song ().

Внутри каждой отдельной функции я вызывал свою функцию math.random, чтобы извлечь случайное слово из массива Speci c. Например, в моей функции flower () у меня есть:

answer = flowers[Math.floor(Math.random() * flowers.length)];

Я обнаружил, что для генерации случайного слова мне также необходимо выполнить мою функцию math.random в глобальном масштабе. Здесь моя проблема. Я не знаю, как создать функцию math.random без присваивания переменной. В общем, у меня есть это:

function randomWord() {
  answer = songs[Math.floor(Math.random() * songs.length)];
}

Так что иногда, когда я нахожусь в категории цветов, появляется слово из моего массива цветов - но иногда вместо этого появляется песня, потому что мне пришлось опубликовать ее глобально чтобы он вообще работал.

Я в растерянности из-за того, как это исправить, и хотя есть много вопросов относительно функции math.floor для массивов - я не нашел никакой информации о том, как обрабатывать несколько массивы вроде этого.

Мне интересно, есть ли общее слово, которое я мог бы использовать вместо определенного c переменного слова для функции math.floor, которая вызывается глобально? Или, может быть, заявление if-else? Я застрял и был бы признателен за любые указания. Спасибо.

Отредактировано, чтобы добавить:

@ KevinWallis, оно вставлено прямо из моего кода:

let answer = "";


function randomWord() {
  answer = songs[Math.floor(Math.random() * songs.length)];
}


function flower() {
  document.getElementById("main").style.display = 'none';
  document.getElementById("play").style.display = "block";
  answer = flowers[Math.floor(Math.random() * flowers.length)];
  word = flowers[answer];
  document.getElementById("categoryName").innerHTML = "Types of Flowers";
  updateTreePicture();
  randomWord();
  generateButtons();
  guessedWord();
}

ОБНОВЛЕНИЕ: Я просто хотел опубликовать, чем закончилось исправление существо:

function randomWord() {
  if (categoryName === 'Flowers') {
    answer = flowers[Math.floor(Math.random() * flowers.length)];
  } else if (categoryName === 'Trees') {
    answer = trees[Math.floor(Math.random() * trees.length)];
  } else if (categoryName === 'Critters') {
    answer = critters[Math.floor(Math.random() * critters.length)];
  } else if (categoryName === 'Songs') {
    answer = songs[Math.floor(Math.random() * songs.length)];
  }
}

Ответы [ 2 ]

0 голосов
/ 22 февраля 2020

Я думаю, что есть несколько основных вещей, которые вам пригодятся для понимания, и, возможно, помешают вам сосредоточиться на хранении всего в одной глобальной переменной как метода доступа к данным повсюду:

  1. Вы можете возвращать значения из функции для использования там, где вы вызвали функцию.

function getTheNumberOne(){
  return 1;
}

var theNumberOne = getTheNumberOne();
console.log(theNumberOne);
Вы можете передавать значения в функции, если хотите использовать их в этих функциях.

function getNumberPlusTen(number){
  return number + 10;
}

var numberPlusTen = getNumberPlusTen(5);
console.log(numberPlusTen);
В rando js .com имеется очень легкая библиотека, которая сделает случайность более простой и удобочитаемой. Это избавит вас от сложности кода и позволит сосредоточиться на важных вещах. Все, что вам нужно сделать, чтобы использовать его, это вставить это <script src="https://randojs.com/1.0.0.js"></script> в заголовок вашего документа html, и тогда вы будете готовы справиться со случайностью так же просто и читабельно, как это:

var flowers = ["rose", "sunflower", "tulip"];
var randomFlower = rando(flowers).value;

console.log(randomFlower);
<script src="https://randojs.com/1.0.0.js"></script>
Если вам необходимо хранить значения в глобальных переменных, простой способ не смешивать их все вместе - хранить их в отдельных переменных. Вам разрешено иметь более одной глобальной переменной!

var flowers = ["rose", "sunflower", "tulip"];
var trees = ["birch", "oak", "maple"];

var randomFlower = "";
var randomTree = "";

function assignRandomValues(){
  randomFlower = rando(flowers).value;
  randomTree = rando(trees).value;
}

function logValues(){
  console.log(randomFlower);
  console.log(randomTree);
}

assignRandomValues();
logValues();
<script src="https://randojs.com/1.0.0.js"></script>

Я не могу дать вам никаких других советов, потому что я не видел остальную часть вашего кода, но эти концепции помогут вам хорошо.

0 голосов
/ 22 февраля 2020

Вы можете создать несколько random функций для песен, цветов и т. Д. c. Вот пример для вызова такой случайной функции и использования возвращаемого значения.

function randomSong() {
    songs = ...;
    return songs[Math.floor(Math.random() * songs.length)];
}

function randomFlower() {
    flowers = ...;
    return flowers[Math.floor(Math.random() * flowers.length)];
}

...

function flower() {
    document.getElementById("main").style.display = 'none';
    document.getElementById("play").style.display = "block";
    // use the selected flower instead of the global answer for all
    flower = randomFlower();
    document.getElementById("categoryName").innerHTML = "Types of Flowers";
    // e.g. the flower can be used as parameter
    updateTreePicture(flower);
    generateButtons();
    guessedWord();
}
...