随机数不是很随机

mar*_*dge 1 javascript random jquery

此函数从文本文件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]);
});
Run Code Online (Sandbox Code Playgroud)

这是随机发生器的问题(从我的阅读中看起来不是很随机)?有没有办法让它只能从一定数量的报价中随机选择,即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@ 
Run Code Online (Sandbox Code Playgroud)

编辑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>
Run Code Online (Sandbox Code Playgroud)

功能:

$('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();
}); 
Run Code Online (Sandbox Code Playgroud)

Gre*_*ill 8

拆分文件后@,最后一项quotes可能是一个空字符串,因为你@在文件末尾的换行符之前有一个.

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