【问题标题】:Picking a random index from an array is always returning me the same index?从数组中选择一个随机索引总是返回相同的索引?
【发布时间】:2018-04-03 03:43:11
【问题描述】:
var letters = ["a", "b", "c", "d", "e", "f", "g", "h"]



var letter  = letter[Math.round(Math.random()*(quotes.length))]

每次它只返回最后一个字母 g,而不是数组中的随机一个。

我做错了什么?

【问题讨论】:

  • quotes.length 更改为letters.length
  • quotes.length 中的引号是什么?
  • 很惊讶你得到任何东西...var letter = letters[Math.floor(Math.random()*(letters.length))]...所以..letters[...]不是letter[...].. snt如上所述,letters.length
  • 哎呀,我的意思是把引号改成字母
  • 所以,真的,唯一的问题是,如果你使用 Math.round,你偶尔会得到 undefined - 这是你代码中唯一的“非拼写错误”问题

标签: javascript arrays indexing


【解决方案1】:

(quotes.length)

quotes 是什么?你想要letters

您正在执行var letter = letter,但尚未定义letter。另外,从数组中选择随机元素时,请使用Math.floor 而不是Math.round

const letters = ["a", "b", "c", "d", "e", "f", "g", "h"];
const letter  = letters[Math.floor(Math.random()*letters.length)];
console.log(letter);

【讨论】:

  • 我不是要加引号,那是错字。我把它改成了字母,但它仍然每次都给我相同的索引/字母?
  • 如果你希望它正常工作,你的代码应该和我的一样 - 如果它不适合你,那么你使用的代码与我不同。
【解决方案2】:

可能需要修正您代码中的一些拼写错误:

var letters = ["a", "b", "c", "d", "e", "f", "g", "h"]
var letter  = letters[Math.round(Math.random()*(letters.length))]

此外,您可能不想使用Math.round,因为它可能导致超出范围的数组访问错误。你应该改用Math.floor

【讨论】:

  • 是的,我不是故意加引号的。我把它改成了字母。但它仍然每次都返回相同的索引,字母“h”??
  • @Jesse 你为什么不赞成我的回答?我将它粘贴到 Chrome 控制台(floor 替换 round),它给了我随机字母。其他东西正在影响您的代码。
  • @Jesse - 如果您在上面的代码中一直得到h,那么您的代码一定与您在问题中发布的完全不同
【解决方案3】:

改正错别字就可以了

var letter = letters[Math.round(Math.random()*(letters.length))]

【讨论】:

  • 不要使用Math.round,正如所有其他击败你的答案中提到的那样:p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多