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

Rya*_*yan 3 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';
Run Code Online (Sandbox Code Playgroud)

然后

RedirUrl.sort(function() {return 0.5 - Math.random()}) 
Run Code Online (Sandbox Code Playgroud)

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

(不用说我把它从网上下载,就像我想做的那样...但我只是不明白它.)

Joa*_*uer 7

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

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

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

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

这个问题有一个已知良好的Fisher-Yates shuffle的工作实现.