【问题标题】:Problem with randomly-generated letters from Array来自 Array 的随机生成字母的问题
【发布时间】:2011-08-27 05:54:38
【问题描述】:

有时随机生成的字母等于“未定义”

有人知道为什么吗?

代码:

<script type="text/javascript"> 
var myArray= ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];

randomnumber=Math.floor(Math.random()*27);
alert(myArray[randomnumber]);

【问题讨论】:

  • 看起来它在这个jsfiddle中工作得很好
  • @macek,您是否尝试多次加载它?它肯定也会弹出空白。
  • 是的,我也无法在那个 jsfiddle 中复制它
  • 继续点击。 1/13 会失败
  • 对不起,我应该更清楚,我的意思是“继续”重新加载。请参阅我的回答和评论以获得完整的解释。

标签: javascript arrays random


【解决方案1】:

嗯,当英语字母表中有 26 个字母时,它可能与您的 Math.floor(Math.random()*27) 使用数字 27 有关。

math random returns 0-.999... 
math random * 27 returns 0-26.999...
floor math random * 27 returns 0 - 26 
an array with every english letter has 26 items 
which means it has items indexed from 0-25

所以你在所有负载的 1/27 的每个框中都有一个空白。但是,一旦“#next”被播种,它将始终保持为“字母”,因为您将其替换为

$("#next").text(good[randomnumber]);

randomnumber=27 good[randomnumber]=undefined$("#next").text(undefined) 什么都不做时,“#next”的内容保持不变。仍然破碎,不太明显。只需将 27 更改为 26 即可。

【讨论】:

  • 实际上,有一个请愿书要求用英语写一个新字母,总共有 27 个。也许 ogps92 只是领先于新标准。总有一天你的答案会是错误的,我们会否决它。 :o)
  • 这解决了我猜的问题......但是为什么它只在加载时发生(而不是在生成其他随机字母时)
  • 因为当你已经在方块中有内容时,将“未定义”传递给 text() 什么都不做。尝试使用 jsfiddle.net/zGghJ/2 之类的内容查看输出,最终您会看到 27:undefined 并注意到最后一个框中的字母保持不变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 2021-09-23
  • 2014-12-15
相关资源
最近更新 更多