随机数不是很随机

时间:2011-04-27 02:41:51

标签: javascript jquery random

此函数从文本文件quotes.txt中选择一个随机引用(每个引号由@分隔)并在引号div中显示它,例如在每个页面加载时显示<div class="quotes">quote shown here</div>

但为什么它有时会跳过引用而在<div>中没有显示任何内容?

$.get('quotes.txt', function(data) {
    var quotes = data.split("\@");
    var idx = Math.floor(quotes.length * Math.random());
    $('.quotes').html(quotes[idx]);
});

随机生成器是否存在问题(从我的阅读中看起来不是很随机)?有没有办法让它只能从一定数量的引号中随机选择,即50?有没有更好的方法 - 也许是php - 生成1到50之间的随机数?

quotes.txt看起来像这样:

Lorem ipsum dolor sit amet, consectetur adipiscing elit@ 
Fusce tincidunt, ante ut scelerisque@ 
Mauris lacinia, magna sed auctor pellentesque, diam nisl rutrum ligula@ 
Etiam tempor elementum augue, vitae cursus eros laoreet@ 
Donec imperdiet ullamcorper pharetra@ 

编辑4/27/11 我最后使用了一个不会显示空白行的问题。 quotes.html以这种方式构建:

<div class="quote">Lorem ipsum dolor sit amet, consectetur adipiscing elit</div>
<div class="quote">Lorem ipsum dolor sit amet, consectetur.</div>

功能:

$('div#quotescontainer').load('quotes.html',function(){
var $quotes = $(this).find('div.quote');
var n = $quotes.length;
var random = Math.floor( Math.random()*n );
$quotes.hide().eq(random).fadeIn();
}); 

6 个答案:

答案 0 :(得分:8)

@上拆分文件后,quotes中的 last 项可能是一个空字符串,因为您之前有一个@文件末尾的换行符。

对于随机数发生器的感知“随机性”,这里可能没有问题。众所周知,人类在检测序列是否随机时是不好的。

答案 1 :(得分:1)

我认为你应该删除quotes.txt末尾的at符号(@),因为它会在quotes数组变量中创建一个空字符串。

答案 2 :(得分:1)

我最终使用了一个不显示空白行的问题。 quotes.html以这种方式构建:

<div class="quote">Lorem ipsum dolor sit amet, consectetur adipiscing elit</div>
<div class="quote">Lorem ipsum dolor sit amet, consectetur.</div>

功能:

$('div#quotescontainer').load('quotes.html',function(){
var $quotes = $(this).find('div.quote');
var n = $quotes.length;
var random = Math.floor( Math.random()*n );
$quotes.hide().eq(random).fadeIn();
});  

答案 3 :(得分:0)

这不是一个jQuery函数,而是一个通用的JavaScript函数。至少创建随机数的代码。你是正确的,虽然它不是很随机。我遇到了这个问题,并找到了帮助我的blog post帮助。

答案 4 :(得分:0)

我认为你可能会得到空白的原因是你的数组有一个尾随空格。如果文件以@结尾,并且您在@上拆分,则最后一项将是一个空白字符串。

答案 5 :(得分:0)

您可以从数组中删除空项目

 var quotes = data.split("\@").filter(function(itm){return !!itm});