S'il y a un tableau comme celui-ci:
var arr1 = ["a", "b", "c", "d"];
Comment perturber au hasard l'ordre du tableau, c'est-à-dire le mélanger.
Il existe un algorithme aléatoire simple qui est largement répandu:
fonction randomsort (a, b) {return (0,5 - math.random ()); }En fait, il est prouvé que ce qui précède n'est pas complètement aléatoire.
Je viens de chercher trop de choses sur Internet. Jetons un coup d'œil à une réponse à haut niveau sur StackOverflow. La réponse vient de Github.
Knuth-Shuffle
Le fisher-yates (aka knuth) shuffle pour le navigateur et le nœud.js
Jetons un coup d'œil à l'algorithme mentionné ci-dessus. Le code est le suivant:
/ * jshint -w054 * / (fonction (exportations) {'utiliser strict'; // http://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-arrayfunction shuffle (array) {var currentIndex = tandis que les elements, tandis que les elements, temporaire, randomlindEx; ! == CurrentIndex) {// Choisissez un élément restant ... randomindex = math.floor (math.random () * currentIndex); currentIndex - = 1; // et échangez-le avec l'élément actuel.TemporaryValue = Array [RandomIndex] = TemporyValue;} array;} exports.knuthShuffle = shuffle;} ('undefined'! == Typeof exports && exports || 'Undefined'! == TypeOf window && window || global));L'auteur recommande d'utiliser une méthode d'écriture de navigateur:
(function () {'utiliser strict'; var a = [2,11,37,42], b; // Le shuffle modifie le tableau d'origine // appelant a.slice (0) crée une copie, qui est attribuée à bb = window.knuthshuffle (a.slice (0)); console.log (b);} ());Nodejs:
NPM Install -s knuth-shuffle (function () {'use strict'; var shuffle = required ('knuth-shuffle'). shuffle (a.slice (0)); console.log (b);} ());Il y en a d'autres qui sont déformés à partir de cet algorithme, comme les suivants pour Loop. Je ne parlerai rien d'autre.
/ *** randomiser l'ordre des éléments du tableau en place. * Utilisation de l'algorithme de shuffle de Durstenfeld. * / Fonction shufflearray (array) {for (var i = array.length - 1; i> 0; i--) {var j = math.floor (math.random () * (i + 1); Temp;} Return Array;}Utilisation d'ES2015 (ES6)
Array.prototype.shuffle = function () {let m = this.length, i; while (m) {i = (math.random () * m--) >>> 0; [this [m], this [i]] = [this [i], this [m]]} return this;}utiliser:
[1, 2, 3, 4, 5, 6, 7] .shuffle ();
J'ai trouvé beaucoup d'algorithmes aléatoires pour la recherche chinoise, mais si elle est complètement aléatoire est toujours nécessaire, et l'efficacité et la compatibilité doivent encore être étudiées. Il est recommandé que si vous avez besoin d'utiliser des éléments de tableau perturbés aléatoirement plus tard, vous pouvez utiliser celui ci-dessus.