다음과 같은 배열이있는 경우 :
var arr1 = [ "a", "b", "c", "d"];
배열의 순서를 무작위로 방해하는 방법, 즉 셔플하는 방법.
널리 퍼져있는 간단한 임의 알고리즘이 있습니다.
함수 randomsort (a, b) {return (0.5 -Math.random ()); }실제로, 위는 완전히 무작위가 아님이 증명됩니다.
방금 인터넷에서 너무 많은 것들을 검색했습니다. StackoverFlow에서 높은 점수를받는 답변을 살펴 보겠습니다. 대답은 Github에서 나옵니다.
크 누스 셔플
Fisher-Yates (일명 Knuth) 브라우저 및 Node.js를위한 셔플
위에서 언급 한 알고리즘을 살펴 보겠습니다. 코드는 다음과 같습니다.
/ *jshint -w054 */(functions) { 'Strict'; // http://stackoverflow.com/questions/2450954/how-to-randomize-a-javascript-rayfunctionct 셔플 (배열) {aray) {rightindex; whine where whole worly worde whole reston gendest; ! == currentIndex) {// 나머지 요소 선택 ... randomindex = math.floor (math.random () * currentIndex); currentIndex -= 1; 그리고 그것을 현재 요소로 바꾸는 것. temporaryValue = array [currentIndex]; array [randomindex]; randomIndex] = renducvalue;} etport. = 셔플;} ( 'undefined'! == typeof exports && 내보내기 || 'undefined'! == typeof window && window || global);저자는 브라우저 쓰기 방법을 사용하는 것이 좋습니다.
(function () { 'strict'; var a = [2,11,37,42], b; // 셔플은 원본 배열을 수정합니다. // a.slice (0) 호출 사본을 생성합니다.nodejs :
npm install -s knuth shuffle (function () { 'strict'; var Shuffle = require ( 'knuth shuffle'). knuthshuffle, a = [2,11,37,42], b; // 셔플은 원래 배열을 수정합니다. 셔플 (a.slice (0)); console.log (b);} ());루프의 다음과 같은이 알고리즘에서 변형 된 다른 것들이 있습니다. 나는 다른 것에 대해 이야기하지 않을 것입니다.
/*** 배열 요소 주문을 무작위로 무작위 화하십시오.* Durstenfeld 셔플 알고리즘 사용.*/함수 shufflearray (array) {for (var i = array.length-1; i> 0; i-) {var j = math.floor (math.random ()* (i + 1); var emp = array [i]; array [j]; 온도;} 반환 배열;}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]]}}을 반환합니다.사용:
[1, 2, 3, 4, 5, 6, 7] .shuffle ();
중국 검색을위한 많은 임의의 알고리즘을 발견했지만 완전히 무작위 여부는 여전히 필요하며 효율성과 호환성을 여전히 조사해야합니다. 나중에 무작위로 배열 요소를 사용해야하는 경우 위의 것을 사용할 수 있습니다.