我正在制作 JavaScript 纸牌游戏。当我在 CSS 技巧中偶然发现这一点时,我正在寻找有关如何一起使用 sort()
和 Math.random()
来洗牌的信息:
array.sort(function() {return 0.5 - Math.random()})
工作得很漂亮,这太棒了,但我不知道为什么。有人能解释一下为什么会这样吗?
最佳答案
Array.sort 的工作原理
在sort函数中,根据compare函数的返回值对数组元素进行排序。如果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。因此,同一数组的排序顺序不同。
关于javascript - 打乱数组: Why does this work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51228854/