按随机顺序对数组进行排序

Med*_*ere 13 javascript arrays sorting random algorithm

我试图理解如何按随机顺序对数组进行排序.所以,我找到了以下代码:

var as = ["max","jack","sam"];  
var s = as.sort(func);  

function func(a, b) {  
  return 0.5 - Math.random();
}  

console.log(s);
Run Code Online (Sandbox Code Playgroud)

我的主要问题是为什么他们使用0.5而不是另一个数字?和它如何工作,请尽量做到简单我在JavaScript是新的,我用这些东西奋斗

rv7*_*rv7 10

Math.random()返回0(独占)之间的数字.我们正在使用,1因为它是平均值.

Array.sort()根据返回值对参数进行排序.因此,0.5将以相等的概率产生正值或负值.因此,它将随机排序参数.

它是如何工作的

  • 如果返回值0.5 - Math.random()正的,则第一参数的索引将是更高的比第二的.
  • 如果是负数,那么第二个参数的索引将高于第一个参数的索引 .
  • 而且,如果是Array.sort(),那就什么都不做.


Jin*_*Jin 8

你用过

var as = ["max","jack","sam"];  
var s = as.sort(func);  

function func(a, b) {  
  return 0.5 - Math.random();
}  

console.log(s);
Run Code Online (Sandbox Code Playgroud)

这里最重要的事情as.sort(func). func(a,b)将返回范围内的值[-0.5,0.5].

因为这个函数返回0.5 - Math.random()而Math.random()将返回浮点值,该值在范围内[0,1].这样你的func意志就会在范围内返回[-0.5,0.5].

这意味着将设置排序顺序increasedecrease.这是随机的.所以你的结果是随机的

var as = ["max","jack","sam"];  
var s = as.sort(func);  

function func(a, b) {  
  return Math.random();
}  

console.log(s);
Run Code Online (Sandbox Code Playgroud)

var as = ["max","jack","sam"];  
var s = as.sort(func);  

function func(a, b) {  
  return 0 - Math.random();
}  

console.log(s);
Run Code Online (Sandbox Code Playgroud)

var as = ["max","jack","sam"];  
var s = as.sort(func);  

function func(a, b) {  
  return 0.5 - Math.random();
}  

console.log(s);
Run Code Online (Sandbox Code Playgroud)

  • @BallpointBen这完全错了.[在`sort`中使用`Math.random()`不会产生无偏见的结果](/sf/answers/1392754611/). (3认同)

Cod*_*iac 5

Math.random()返回0到1之间的随机值(包含0但排除1).所以0.5作为中点.如果使用大于1或小于0的值,则它将始终为true或false.因此,使用0.5.

你可以在这里阅读更多关于Math.random()的内容

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random

让我们用例子来理解它

var as = ["max","jack","sam"];  
var s = as.sort(func);  

function func(a, b) {  
  return 0.5 - Math.random();
}  

console.log(s);
Run Code Online (Sandbox Code Playgroud)

这是您使用大于1的值时获得的

var as = ["max","jack","sam"];  
var s = as.sort(func);  

function func(a, b) {  
  return 1 - Math.random();
}  

console.log(s);
Run Code Online (Sandbox Code Playgroud)

当您使用小于0的值时会发生这种情况

var as = ["max","jack","sam"];  
var s = as.sort(func);  

function func(a, b) {  
  return -1 - Math.random();
}  

console.log(s);
Run Code Online (Sandbox Code Playgroud)

PS: -

  1. 尝试从上述所有条件打印输出,您将看到最后两个条件将始终从函数返回true或false.所以你不会得到随机排序.

  2. 现在谈谈从0到0.99的任何值,你可以使用任何值,但0.5将最好地满足你的目的.因为它是一个中间点,你最有可能得到最好的答案.