Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 随机但只是在铬_Javascript_Random - Fatal编程技术网

Javascript 随机但只是在铬

Javascript 随机但只是在铬,javascript,random,Javascript,Random,我有这个函数来创建一个随机的数字范围 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; }); } 它工作完美,但只有在铬。由于某些原因,所有其他浏览器的变化都很小 我这里有一个简单的演示,你可以

我有这个函数来创建一个随机的数字范围

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中的数字顺序大多是随机的,但在其他浏览器中没有太多变化,只有少数数字改变了位置,但看起来几乎一样

现在检查一下Chrome和其他浏览器,你会非常清楚地看到它们之间的区别

知道为什么会这样吗


编辑:我还有另一个
randomRange
函数,它在所有浏览器中都可以正常工作,只是更长更难看,请查看差异。

这可能是因为在浏览器之间实现了sort()方法。从我到目前为止看到的事实来看,我猜Chrome在进行排序时总是使用非稳定排序(例如quicksort),而其他浏览器在输入大小较小时使用陈旧排序(例如气泡排序)

首先,输入(最初从
新数组(..)
创建)已经排序;而
函数(){return 0 | Math.random()*max;}
将始终返回一个非负数,这表示a>=b(或a问题已解决!我在Hacker News上找到了a,它现在在所有浏览器中都能完美工作:

function randomRange(min, max) {
  return (new Array(++max-min))
  .join('.').split('.')
  .map(function(v,i){ return min+i; })
  .map(function(v) { return [Math.random(), v]; })
  .sort().map(function(v) { return v[1]; });
}
演示:(如果看不到图像,请单击“使用JS运行”)

根据

array.sort([compareFunction])

如果compareFunction(a,b)返回0,则将a和b保持不变,并使用 相互尊重,但根据所有不同的 注意:ECMAscript标准不能保证这一点 行为,因此并非所有浏览器(例如Mozilla版本) 至少回到2003年)尊重这一点

你可以试试

.sort(function(){ return Math.random()*2-1; })

你在这里要做的就是返回一个大于、小于或等于0的数字。

正如你在Chrome中看到的那样,数字的顺序大多是随机的
你怎么能看到随机的顺序呢?看看第二个演示,它变得非常清晰。在Chrome中,瓷砖会随机消失,但在Firefox中,瓷砖会随机消失从下到上,没有变化…点击“切换猫”几次,你就会看到不同。在FireFox中,我看到1x1的图片。也许这是一个html/css错误。使用排序功能进行随机洗牌仍然经常会引起很多混乱,所以请注意!@Bondye:确保点击“使用JS运行”在右上角。我认为这是jsbin或placekitten的问题,如果你按下按钮,图像将显示正常。+1,我没有看到那篇MDN文章。这在FF和Chrome中似乎工作正常,但在Opera中仍然存在一些变体问题,但我在HN上找到的代码似乎起到了作用。