프로그래밍 언어/HTML,CSS,JS

JavaScript 배열을 무작위로 섞는 방법

Rateye 2021. 6. 29. 10:04
728x90
반응형

 

질문 : JavaScript 배열을 무작위로 섞는 방법은 무엇입니까?

다음과 같은 배열이 있습니다.

var arr1 = ["a", "b", "c", "d"];

무작위로 섞는 방법은 무엇입니까?

 

답변

사실상 편향되지 않은 셔플 알고리즘은 Fisher-Yates (일명 Knuth) 셔플입니다.

https://github.com/coolaj86/knuth-shuffle 참조

여기에서 멋진 시각화를 볼 수 있습니다 (그리고 여기에 링크 된 원본 게시물).

 
function shuffle(array) {
    var currentIndex = array.length,  randomIndex;

	// While there remain elements to shuffle...
  while (0 !== currentIndex) {

    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex--;

    // And swap it with the current element.
    [array[currentIndex], array[randomIndex]] = [
    array[randomIndex], array[currentIndex]];
  }

	return array;
}

// Used like so
var arr = [2, 11, 37, 42];
shuffle(arr);
console.log(arr);
 

주의 : 위의 예는 기본 요소의 배열에만 적용됩니다. 배열에 참조가 포함되어 있으면 설정되는 값을 temporaryValue 로 복제 해야합니다. array[randomIndex] 의 참조가 currentIndex와 randomIndex로 설정됩니다.

사용 된 알고리즘에 대한 추가 정보.

출처 : https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
728x90
반응형