【问题标题】:shuffle an array with math.random用 math.random 打乱一个数组
【发布时间】:2011-05-31 08:52:31
【问题描述】:

我的洗牌数组然后返回它的函数不能正常工作,我不明白为什么。

numbers.sort(function() { return Math.round(Math.random()); } );
return numbers;

这可行,但是数组中的第一项总是相同的。

有人知道为什么吗?

【问题讨论】:

标签: javascript arrays random


【解决方案1】:

这是没有办法排序的。您告诉排序器一个值大于另一个值,而在下一个请求时它可以更小。谁知道会发生什么。分拣机可能需要很长时间,性能很差,或者您可能会撕裂构成宇宙的结构。

如果你想对一副牌进行排序,我认为最好循环所有牌,然后将每张牌与随机的另一张牌交换。这样一来,您就可以确定整个套牌只在一次迭代中就被洗牌了。

【讨论】:

  • 使用 for 循环后不仅可以工作,而且工作速度也快了很多:)
【解决方案2】:

使用 Math.floor() 代替 Math.round()

【讨论】:

  • Math.floor(Math.random()) 将始终返回 0,而 round 将返回 0 或 1,但绝不会返回 -1。两者都不像 array.sort(function(){return .5-Math.random()})
猜你喜欢
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 2011-09-05
  • 2017-09-29
  • 2010-10-03
  • 1970-01-01
相关资源
最近更新 更多