javascript - 打乱数组: Why does this work?

标签 javascript shuffle

我正在制作 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/

相关文章:

javascript - 如何仅从 XMLHttpRequest 获取响应 header

python - 控制洗牌距离

带有 ID 和描述的 PHP 数组 - 随机化数组并打印列表

javascript - jQuery : window is not defined 的 Buster.js 依赖性错误

第二次注册时 JavaScript 事件监听器不起作用

javascript - 如果鼠标在元素内,则延迟 mouseenter 事件并引发事件

javascript - 如何使用浏览器的 PDF 查看器而不是下载来打开 PDF Blob?

javascript - 洗牌 HTML 链接数组的问题

javascript - 跨多个页面获取随机的、不重复的项目