我有这个简单的数组:
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
让我困惑......究竟是什么?
(毋庸置疑,我将它从网上下载,就像我想做的那样......但我只是不理解它。)
答案 0 :(得分:7)
它使用排序方法对URL列表进行排序,该排序方法在大约一半的情况下随机返回大于或小于0的值。
Math.random()
返回0和1之间的数字。因此0.5 - Math.random()
是在-0.5和0.5之间随机决定的值。这些值中大约有一半大于零,其中一半小于零。
因此,比较函数大约有一半的时间会说第一个对象大于第二个对象,而另一半时间会说相反。
这是一种随机洗牌的简单方法。正如评论中指出的那样,不是一种改组数组的好方法(因为分布不均匀)。
答案 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表示a
在b
之前,a
在b
之后大于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,等等。