J'essaie de comprendre comment trier un tableau dans un ordre aléatoire fonctionne. J'ai donc trouvé le code suivant:
var as = ["max","jack","sam"];
var s = as.sort(func);
function func(a, b) {
return 0.5 - Math.random();
}
console.log(s);
ma principale question est de savoir pourquoi ils utilisent 0,5 et non un autre numéro ? et comment cela fonctionne vraiment essayez de le simplifier, je suis nouveau en javascript et je me bats avec ces choses
Vous avez utilisé
var as = ["max","jack","sam"];
var s = as.sort(func);
function func(a, b) {
return 0.5 - Math.random();
}
console.log(s);
Et voici la chose la plus importante est as.sort(func)
.func(a,b)
retournera une valeur dans la plage de [-0.5,0.5]
.
Parce que cette fonction renvoie 0.5 - Math.random()
et Math.random () renverra la valeur float comprise dans la plage de [0,1]
. Ainsi, votre func
renverra une valeur dans la plage de [-0.5,0.5]
.
Et cela signifie que cet ordre de tri sera défini avec increase
ou decrease
. Ceci est aléatoire . Donc, votre résultat sera aléatoire
var as = ["max","jack","sam"];
var s = as.sort(func);
function func(a, b) {
return Math.random();
}
console.log(s);
var as = ["max","jack","sam"];
var s = as.sort(func);
function func(a, b) {
return 0 - Math.random();
}
console.log(s);
var as = ["max","jack","sam"];
var s = as.sort(func);
function func(a, b) {
return 0.5 - Math.random();
}
console.log(s);
Math.random () retourne un nombre compris entre 0 and 1
(exclusif). Nous utilisons 0.5
car il s’agit de la valeur moyenne.
Array.sort () trie les paramètres en fonction de la valeur de retour. Donc, 0.5 - Math.random()
donnera valeur positive ou négative avec une probabilité égale. Par conséquent, il va trier les paramètres au hasard.
Array.sort
est positive, alors l'index du premier paramètre Sera supérieur à celui du second.0
, alors ne rien faire.Math.random () renvoie une valeur aléatoire comprise entre 0 à 1 (0 est inclus, mais 1 est exclu)} [ . Donc, 0,5 agit comme point médian. Si vous utilisez une valeur telle que supérieure à 1 ou inférieure à 0, elle sera toujours vraie ou fausse… .. Donc, pour cette raison, 0,5 est utilisé.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
Comprenons un peu plus avec des exemples
var as = ["max","jack","sam"];
var s = as.sort(func);
function func(a, b) {
return 0.5 - Math.random();
}
console.log(s);
C'est ce que vous obtenez lorsque vous utilisez une valeur supérieure à 1
var as = ["max","jack","sam"];
var s = as.sort(func);
function func(a, b) {
return 1 - Math.random();
}
console.log(s);
C'est ce qui se passe lorsque vous utilisez une valeur inférieure à 0
var as = ["max","jack","sam"];
var s = as.sort(func);
function func(a, b) {
return -1 - Math.random();
}
console.log(s);
P.S: -
Essayez d’imprimer la sortie de toutes les conditions ci-dessus, vous constaterez que les deux dernières conditions renvoient toujours la valeur true ou false de la fonction. de sorte que vous ne ferez pas un tri aléatoire.
Maintenant, parlez de toute valeur comprise entre 0 et 0,99, vous pouvez utiliser n’importe quelle valeur, mais 0,5 vous conviendra mieux. Parce que c’est un point central, vous obtiendrez probablement la meilleure réponse.
Si vous voulez simplement déplacer les éléments près de leur position de départ de façon aléatoire, utilisez bien sort
avec random
, mais dans la plupart des cas, ce n'est pas ce que vous voulez. Vous voulez bien mélanger un tableau, complètement randomiser la position de chaque élément. Et pour cette fonction random
dans la fonction sort
intégrée, c’est une pratique terrible, car elle est biaisée en faveur de l’état initial, ce qui signifie que les éléments du tableau "brassés" tendent à rester près de leur position (ceux qui étaient au début ont la forte probabilité de rester près du début, etc ...). Plus la taille de la matrice est grande, moins elle est mélangée.
Voici la preuve: Est-il correct d'utiliser la méthode JavaScript Array.sort () pour le brassage?
Et voici la fonction pour mélanger les tableaux que j'utilise le plus souvent. Il randomise complètement la position de chaque élément.
function shuffle(arr) { // randomly rearanges the items in an array
const result = [];
for (let i = arr.length-1; i >= 0; i--) {
// picks an integer between 0 and i:
const r = Math.floor(Math.random()*(i+1)); // NOTE: use a better RNG if cryptographic security is needed
// inserts the arr[i] element in the r-th free space in the shuffled array:
for(let j = 0, k = 0; j <= arr.length-1; j++) {
if(result[j] === undefined) {
if(k === r) {
result[j] = arr[i]; // NOTE: if array contains objects, this doesn't clone them! Use a better clone function instead, if that is needed.
break;
}
k++;
}
}
}
return result;
}
Math.random
renvoie un nombre compris entre 0 et 1.
La fonction de tri utilise la valeur de retour x
comme suit:
x == 0
: même valeur, possibilité de commander "comme il le veut"
x < 0
: le premier objet est inférieur à le second, son index dans le tableau trié sera donc inférieur à celui de l'autre
x > 0
idem que x < 0
mais l'inverse
Puisque Math.random
renvoie un nombre compris entre 0 et 1 et que nous souhaitons également obtenir des nombres négatifs, nous devons soustraire une valeur. Ici 0.5 - Math.random()
donnerait un nombre compris entre 0.5 et -0.5
Si vous appelez la méthode sort
avec un paramètre de fonction, il est appelé plusieurs fois. Cette fonction doit accepter deux paramètres (appelons le premier A et le second B). Chaque fois, elle doit renvoyer une valeur:
Ainsi, dans cet exemple, nous avons besoin de valeurs de retour aléatoires répartissant de manière égale les valeurs négatives et positives. Puisque Math.random()
renvoie une valeur comprise entre 0 et 1, 0.5 - Math.random()
renverra des valeurs comprises entre -0,5 et 0,5, ce qui répond aux exigences.