为什么使用 Math.random() 的 sort() 与使用数字不同?
Why sort() using Math.random() is different from using a number?
我使用相同的数字范围得到两个不同的结果。对不起,如果它很明显,我是一个初学者,找不到这个问题的答案。
下面的代码打乱了数组。
(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]
回调函数的 return 值可以是以下三种之一:
- 小于0(表示一个小于另一个)
- 0(表示值相同)
- 大于 0(意味着它们是相反的)
如果您 return 一个固定数字,那么排序顺序将保持不变。
如果你 return 一个 0.5 -
一个介于 0 和 1 之间的随机数,那么它将是三个中的任意一个。
sort
回调从数组中获取两个项(你完全忽略)并且应该return一个<0的数字,== 0 或 > 0 以指示两项中哪一项更大或它们是否相等。 回调被调用多次, 算法需要比较的每个随机项目对调用一次。如果您 return 一个实际的随机数,那么每对项目每次都会根据自定义数字确定为 greater/equal/less。如果您硬编码一个数字,那么所有项目的结果都是相同的。
参见:
(function(array) {
array.sort((a, b) => {
const r = 0.5 - Math.random();
console.log(a, b, r);
return r;
});
console.log(array);
})([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
在第一个代码段中,内联函数 () => 0.5 - Math.random()
被求值 多次 ,每次产生不同的值(有时 < 0,有时 > 0,或者也许even === 0), 导致随机排序。
在第二个代码段中,内联函数 () => 0.2145467
被 也 计算 多次 ,但是每次它产生相同的值(总是 > 0),导致固定的排序顺序。
我使用相同的数字范围得到两个不同的结果。对不起,如果它很明显,我是一个初学者,找不到这个问题的答案。
下面的代码打乱了数组。
(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]
回调函数的 return 值可以是以下三种之一:
- 小于0(表示一个小于另一个)
- 0(表示值相同)
- 大于 0(意味着它们是相反的)
如果您 return 一个固定数字,那么排序顺序将保持不变。
如果你 return 一个 0.5 -
一个介于 0 和 1 之间的随机数,那么它将是三个中的任意一个。
sort
回调从数组中获取两个项(你完全忽略)并且应该return一个<0的数字,== 0 或 > 0 以指示两项中哪一项更大或它们是否相等。 回调被调用多次, 算法需要比较的每个随机项目对调用一次。如果您 return 一个实际的随机数,那么每对项目每次都会根据自定义数字确定为 greater/equal/less。如果您硬编码一个数字,那么所有项目的结果都是相同的。
参见:
(function(array) {
array.sort((a, b) => {
const r = 0.5 - Math.random();
console.log(a, b, r);
return r;
});
console.log(array);
})([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
在第一个代码段中,内联函数 () => 0.5 - Math.random()
被求值 多次 ,每次产生不同的值(有时 < 0,有时 > 0,或者也许even === 0), 导致随机排序。
在第二个代码段中,内联函数 () => 0.2145467
被 也 计算 多次 ,但是每次它产生相同的值(总是 > 0),导致固定的排序顺序。