>  Q&A  >  본문

JavaScript에서 배열을 무작위로 정렬(셔플링)하는 방법을 마스터하세요.

<p>다음과 같은 배열이 있습니다. </p> <pre class="brush:php;toolbar:false;">var arr1 = ["a", "b", "c", "d"];</pre> <p>무작위화/셔플은 어떻게 하나요? </p>
P粉877719694P粉877719694425일 전516

모든 응답(2)나는 대답할 것이다

  • P粉320361201

    P粉3203612012023-08-23 12:27:59

    다음은 Fisher-Yates의 최적화된 버전인 Durstenfeld shuffle의 JavaScript 구현입니다.

    으아아아

    카드 덱에서 무작위로 선택하는 것처럼 각 원본 배열 요소에 대해 무작위 요소를 선택하고 다음 추첨에서 제외합니다.

    이 영리한 제거 방법은 선택한 요소를 현재 요소와 바꾼 다음 나머지 요소에서 다음 무작위 요소를 선택하고 최적의 효율성으로 역방향으로 반복하여 무작위 선택이 단순화되도록 보장합니다(항상 0부터 시작할 수 있음). 마지막 요소.

    알고리즘의 실행 시간은 O(n)。需要注意的是,这个洗牌是原地进行的,所以如果你不想修改原始数组,请先使用.slice(0)메서드의 복사본입니다.


    편집: ES6/ECMAScript 2015로 업데이트

    새로운 ES6에서는 동시에 두 개의 변수를 할당할 수 있습니다. 이는 한 줄의 코드로 할 수 있으므로 두 변수의 값을 교환하려는 경우 특히 편리합니다. 이는 이 기능을 사용하는 동일한 함수의 더 짧은 형식입니다.

    으아아아

    회신하다
    0
  • P粉928591383

    P粉9285913832023-08-23 11:04:38

    사실 편견이 없는 셔플링 알고리즘은 Fisher-Yates(일명 Knuth) 셔플링 알고리즘입니다.

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

    으아악

    회신하다
    0
  • 취소회신하다