我有这个函数来创建随机的数字范围。
function randomRange(min, max) {
return (new Array(++max-min))
.join('.').split('.')
.map(function(v,i){ return min+i; })
.sort(function(){ return 0|Math.random()*max; });
}
它工作完美,但仅限于 Chrome。由于某种原因,所有其他浏览器的变化很小......
我在这里有一个简单的演示,以便您可以看到差异http://jsfiddle.net/elclanrs/zZRda/ http://jsfiddle.net/elclanrs/zZRda/.
正如您所看到的,Chrome 中的数字顺序大部分是随机的,但在其他浏览器中没有太大变化,只有少数数字改变了位置,但看起来几乎相同。
现在检查http://jsbin.com/iyalax/3/edit http://jsbin.com/iyalax/3/edit在 Chrome 和其他浏览器中,您会非常清楚地看到差异。
有什么想法为什么会发生这种情况吗?
Edit:我还有另一个randomRange
在所有浏览器中都可以正常工作的函数,只是更长且更难看,请检查http://jsbin.com/iyalax/4/edit http://jsbin.com/iyalax/4/edit看看差异。
根据MDN https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort,
array.sort([比较函数])
如果compareFunction(a, b)返回0,则保持a和b不变
互相尊重,但要尊重所有不同的人
元素。注意:ECMAscript 标准不保证这一点
行为,因此并非所有浏览器(例如 Mozilla 版本约会
至少回到 2003 年)尊重这一点。
你可以试试
.sort(function(){ return Math.random()*2-1; })
您在这里要做的就是返回一个大于、小于或等于 0 的数字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)