有多个数组时如何处理math.random?

问题描述 投票:1回答:2

我有四个阵列-花,树,小动物和歌曲。

我有四个对应的功能-flower(),tree(),critter()和song()。

在上面的每个函数中,我都调用了math.random函数来从特定数组中检索随机单词。例如,在我的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函数的问题-我还没有找到有关如何处理这样的多个数组的信息。

我想知道对于全局调用的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)];
  }
}
arrays math random floor
2个回答
0
投票

您可以为歌曲,花朵等创建多个random函数。这是调用此类随机函数并使用返回值的示例。

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();
}

0
投票

我认为这里有一些主要的事情对您有所帮助,也许会阻止您专注于将所有内容存储在单个全局变量中,作为在任何地方访问数据的方法:

  1. 您可以从函数返回值以在调用函数的地方使用。

function getTheNumberOne(){
  return 1;
}

var theNumberOne = getTheNumberOne();
console.log(theNumberOne);
  1. 如果希望能够在这些函数中使用它们,可以将其传递给函数。

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

var numberPlusTen = getNumberPlusTen(5);
console.log(numberPlusTen);
  1. randojs.com有一个非常轻量级的库,它将使随机性更简单并且更具可读性。这将消除代码中的许多复杂性,并使您能够专注于重要的事情。使用它所需要做的就是将<script src="https://randojs.com/1.0.0.js"></script>粘贴到html文档的head标签中,然后您就可以像这样简单易懂地处理随机性了:

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

console.log(randomFlower);
<script src="https://randojs.com/1.0.0.js"></script>
  1. 如果必须将值存储在全局变量中,不将它们混合在一起的一种简单方法是将它们存储在单独的变量中。您可以使用多个全局变量!

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>

我无法提供任何其他建议,因为我没有看到其余的代码,但是这些概念将为您提供良好的指导。

© www.soinside.com 2019 - 2024. All rights reserved.