Если есть такой массив:
var arr1 = ["a", "b", "c", "d"];
Как случайным образом нарушить порядок массива, то есть перетасовать его.
Существует простой случайный алгоритм, который широко распространен:
функция Randomsort (a, b) {return (0.5 - math.random ()); }На самом деле, доказано, что вышеперечисленное не совсем случайно.
Я только что искал слишком много таких вещей в Интернете. Давайте посмотрим на ответ с высокой оценкой на Stackoverflow. Ответ приходит от GitHub.
Кнут-Шалл
Fisher-Yates (AKA Knuth) Shuffle для браузера и Node.js
Давайте посмотрим на алгоритм, упомянутый выше. Код заключается в следующем:
/ *jshint -w054 */(function (экспорт) {'strict'; // http://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-rayfunction shuffle (Array) {var-curray = rante.length, ThemeraryValue, randomIndex; CurrentIndex) {// выбирать оставшийся элемент ... randomIndex = math.floor (math.random () * currentIndex); currentIndex -= 1; // и обменивать его с текущим элементом. shuffle;} ('undefined'! == typeof exports && exports || 'undefined'! == typeof window && window || Global));Автор рекомендует использовать метод написания браузера:
(function () {'strict'; var a = [2,11,37,42], b; // Срайчик изменяет исходный массив // вызывающий a.slice (0) создает копию, которая назначается Bb = window.knuthshuffle (a.slice (0)); console.log (b);} ());Nodejs:
npm install -s knuth-shuffle (function () {'strict'; var shuffle = require ('knuth-shuffle'). knuthshuffle, a = [2,11,37,42], b; // Срайт модифицирует исходный массив // Призыв A.Slice (0) создает копию, который назначен BB = Shuffle (A.Slice (0);Есть другие, которые деформированы из этого алгоритма, например, следующее для цикла. Я не буду говорить ни о чем еще.
/*** Рандомизитный порядок элемента массива. Temp;} return Array;}
Использование ES2015 (ES6)
Array.prototype.shuffle = function () {let m = this.length, i; while (m) {i = (math.random () * m--) >>> 0; [this [m], это [i]] = [this [i], это [m]]} reture this;}использовать:
[1, 2, 3, 4, 5, 6, 7] .shuffle ();
Я нашел много случайных алгоритмов для поиска в китайском поиске, но все еще необходимо, все еще необходимо, и эффективность и совместимость еще предстоит исследовать. Рекомендуется, чтобы, если вам нужно использовать случайным образом нарушить элементы массива позже, вы можете использовать вышеуказанный.