JavaScript에서 배열을 무작위로 정렬(셔플링)하는 방법을 마스터하세요.
P粉877719694
P粉877719694 2023-08-22 14:01:56
0
2
545
<p>다음과 같은 배열이 있습니다. </p> <pre class="brush:php;toolbar:false;">var arr1 = ["a", "b", "c", "d"];</pre> <p>무작위화/셔플은 어떻게 하나요? </p>
P粉877719694
P粉877719694

모든 응답(2)
P粉320361201

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

으아아아

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

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

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


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

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

으아아아
P粉928591383

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

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

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