재작성된 제목: JavaScript 배열을 무작위로 정렬(셔플)하는 방법 알아보기
P粉818125805
P粉818125805 2023-08-21 11:28:39
0
2
601
<p>다음과 같은 배열이 있습니다.</p> <pre class="brush:php;toolbar:false;">var arr1 = ["a", "b", "c", "d"];</pre> <p>무작위화/셔플은 어떻게 하나요? </p>
P粉818125805
P粉818125805

모든 응답(2)
P粉810050669

이것은 Fisher-Yates 알고리즘의 최적화된 버전인 Durstenfeld shuffle의 JavaScript 구현입니다.

으아아아

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

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

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


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

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

으아아아
P粉553428780

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

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

으아아아
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿