Javascript:请向我解释这一行代码

时间:2011-06-01 11:47:47

标签: javascript

我有这个简单的数组:

var RedirUrl = new Array(4);
RedirUrl[0] = 'http://mafi.se/mf_redir/new_install_'+this_version+'.html';
RedirUrl[1] = 'http://ifurls.com/mf_redir/new_install_'+this_version+'.html';
RedirUrl[2] = 'http://ez.se/xml-update/mf_redir/new_install_'+this_version+'.html';
RedirUrl[3] = 'http://ilovre.net/mf_redir/new_install_'+this_version+'.html';
RedirUrl[4] = 'http://rihel.com/mf_redir/new_install_'+this_version+'.html';

然后

RedirUrl.sort(function() {return 0.5 - Math.random()}) 

最后一点让我感到困惑。 我理解“排序”,我理解Math.random,但return 0.5让我困惑......究竟是什么?

(毋庸置疑,我将它从网上下载,就像我想做的那样......但我只是不理解它。)

6 个答案:

答案 0 :(得分:7)

它使用排序方法对URL列表进行排序,该排序方法在大约一半的情况下随机返回大于或小于0的值。

Math.random()返回0和1之间的数字。因此0.5 - Math.random()是在-0.5和0.5之间随机决定的值。这些值中大约有一半大于零,其中一半小于零。

因此,比较函数大约有一半的时间会说第一个对象大于第二个对象,而另一半时间会说相反。

这是一种随机洗牌的简单方法。正如评论中指出的那样,是一种改组数组的好方法(因为分布不均匀)。

This question有一个known-good Fisher-Yates shuffle的工作实现。

答案 1 :(得分:1)

sort()接受一个函数来比较数组中的值作为它的参数。这里sort()方法被告知给出一个介于0.0和1.0之间的随机数,而0.5用于使随机数在-0.5到0.5之间,这随机地说小于或大于。

答案 2 :(得分:1)

比较器功能应返回< 0表示第一个值更小,> 0 0表示它更大,0表示相等。 Math.random()返回一个介于0和1之间的数字。因此,通过减法,您可以获得随机排序!

答案 3 :(得分:1)

这会改变阵列。如果函数与Array.sort()一起使用,那么它通常有两个参数被比较Array.sort(function(a,b){})。返回值小于0表示ab之前,ab之后大于0,0表示它们具有相同的顺序。使用0.5 - Math.random()意味着您应该随机获得大于或小于0的值。

答案 4 :(得分:1)

通过让shuffle随机返回介于-0.5和+0.5之间的值

,似乎脚本将随机compare function此数组

它还生成一个长度为4的数组,但随后用5个项填充

我建议使用此格式

var RedirUrl = [
'http://mafi.se/mf_redir/new_install_'+this_version+'.html',
'http://ifurls.com/mf_redir/new_install_'+this_version+'.html',
'http://ez.se/xml-update/mf_redir/new_install_'+this_version+'.html',
'http://ilovre.net/mf_redir/new_install_'+this_version+'.html',
'http://rihel.com/mf_redir/new_install_'+this_version+'.html'
]

答案 5 :(得分:1)

此处sort将根据您传递给它的比较函数执行排序。

在你的情况下,它是:

function() {return 0.5 - Math.random()}

假设您熟悉基于比较的排序,该函数应返回值,表示左侧值较小,如果它们相等且如果左侧值大于右侧值,则与C函数strcmp()非常相似。

查看你所拥有的函数,它将尝试执行随机排序,即尝试对数组进行随机排序。

另外需要注意的是,这种混洗算法并不理想。这将是自相矛盾的。由于一切都会随机发生,因此可能导致a,等等。