改组数组:为什么这样做有效?

时间:2018-07-08 04:34:46

标签: javascript shuffle

我正在制作JavaScript纸牌游戏。我一直在寻找有关如何一起使用sort()Math.random()的信息,以便在CSS技巧上碰到这个问题时可以打乱甲板:

array.sort(function() {return 0.5 - Math.random()})

做工精美,很棒,但是我不知道为什么。有人可以解释为什么这样做吗?

1 个答案:

答案 0 :(得分:1)

Array.sort的工作方式

在排序函数中,根据比较函数的返回值对数组元素进行排序。如果a和b是要比较的两个元素,则:

array.sort(function(a, b){return a - b});

现在,如果(a-b)小于0,则将a排序为小于b的索引,因为a小于b。

如果(a-b)返回0,则使a和b相对不变,因为它们相等。 注意:ECMAscript标准不保证此行为。

如果(a-b)大于0,则b被排序为小于a的索引,因为a大于b。

Math.Random的工作方式

它只是返回0到1之间的随机值。

现在进入这种情况,因为这里忽略了数组中的实际值,并且将随机值传递给(a-b),对于每对要比较的对,该函数将随机返回<0、0或> 0。因此,同一数组的排序顺序不同。