javascript - 为什么 sort() 使用 Math.random() 与使用数字不同?
问题描述
我使用相同的数字范围有两个不同的结果。对不起,如果它很明显,我是一个完全的初学者,找不到这个答案。
下面对数组进行洗牌。
(function(array) {
array.sort(() => 0.5 - Math.random());
console.log(array);
})([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
// Output: [Shuffled array]
但是,如果我手动写一个介于 -0.5 和 0.5 之间的随机数,我无法对其进行随机播放。为什么??
(function(array) {
array.sort(() => 0.2145467);
console.log(array);
})([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
// Output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
解决方案
回调函数的返回值可以是以下三项之一:
- 小于 0(表示一个小于另一个)
- 0(表示值相同)
- 大于 0(意味着它们是相反的)
如果您返回一个固定数字,那么排序顺序将是不变的。
如果您返回一个0.5 -
介于 0 和 1 之间的随机数,那么它将是三个中的任意一个。
推荐阅读
- oracle - SQLDeveloper 中的购物车功能自动化
- c# - Process.kill() 需要很长时间才能在 c# 中杀死消耗大量内存的进程
- xcode - 如何同时在 Android 和 IOS 模拟器中查看我的颤振应用程序输出?
- android - 无法解析 com.android.tools.build:gradle:3.0.1 ;
- c - 如何在 VS Code 调试会话中持续观察变量及其值?
- azure - AKS 中的 MSSQL linux - 许可
- python - 在 Python 中对 MM/DD/YYYY 字符串数组进行排序的最有效方法?
- python - uwsgi 中的最大请求实际上是如何工作的
- kdb - KDB/q:将列表插入到表中
- reactjs - 当我在 React 类组件中扩展接口并编写酶测试时,得到一个错误,所有道具和状态都必须传递给酶代码