Le réseau imprégné signifie perturber l'ordre de tous les éléments du tableau.
Une méthode courante consiste à transmettre une fonction à la méthode de tri native du tableau, qui renvoie au hasard 1 ou -1 pour atteindre le but d'organiser au hasard des éléments du tableau.
La copie de code est la suivante:
arr.sort (fonction (a, b) {return math.random ()>. 5? -1: 1;});
Bien que cette méthode soit intuitive, elle n'est pas efficace. Après mon test, il a gâché un tableau de 10 000 éléments, et le temps qu'il a pris était d'environ 35 ms (Firefox)
J'ai toujours eu l'excellente qualité de briser la cocotte pour demander la fin, alors j'ai trouvé une méthode efficace. Voir ce texte original
La copie de code est la suivante:
if (! array.prototype.shuffle) {
Array.prototype.shuffle = function () {
pour (var j, x, i = this.length; i; j = parseInt (math.random () * i), x = this [- i], this [i] = this [j], this [j] = x);
retourner ceci;
};
}
arr.shuffle ();
Cette méthode ajoute une fonction à Array.prototype, appelé Shuffle - mais le nom n'a pas d'importance, ce qui est important, c'est son efficacité.
Prenez le tableau de 10 000 éléments ci-dessus pour le tester. Il ne faut que 7 ou 8 millisecondes pour le compléter dans l'ordre en utilisant cette méthode.
Augmentez les éléments du tableau de 10 fois à 100 000 pour les tests. La méthode de premier tri prend environ 500 + ms et la méthode de shuffle prend environ 40 ms. La différence est énorme.
Code de test complet:
La copie de code est la suivante:
Var Count = 100000, arr = [];
pour (var i = 0; i.5? -1: 1;});
Array.prototype.sort.call (arr, fonction (a, b) {return math.random ()>. 5? -1: 1;});
document.write (arr + '
');
var t1 = new Date (). getTime ();
Document.Write (T1-T);
// Les méthodes suivantes sont les plus efficaces
if (! array.prototype.shuffle) {
Array.prototype.shuffle = function () {
pour (var j, x, i = this.length; i; j = parseInt (math.random () * i), x = this [- i], this [i] = this [j], this [j] = x);
retourner ceci;
};
}
var t = new Date (). getTime ();
arr.shuffle ();
document.write ('
'+ arr +'
');
var t1 = new Date (). getTime ();
Document.Write (T1-T);
De plus, avez-vous remarqué la boucle pour le code Shuffle? Il n'a pas la seconde moitié! Autrement dit, il n'y a que pour (..) mais pas ce qui suit {..}, vous pouvez donc écrire de cette façon! Et il a réellement exécuté normalement! C'est tellement curieux, je dois aller au parc du blog pour demander.