이 작업의 목표는 지정된 범위 내에서 반복되지 않는 일련의 난수를 생성하는 것입니다. 한 가지 접근 방식은 생성된 각 번호를 이전에 생성된 번호 목록과 비교하는 것입니다. 그러나 이 방법은 과도한 재귀로 인해 "RangeError"가 발생할 수 있습니다.
더 나은 해결책은 원하는 숫자의 무작위 순열을 미리 생성하는 것입니다. 이는 다양한 기술을 사용하여 달성할 수 있습니다:
<code class="javascript">var nums = [1,2,3,4,5,6,7,8,9,10], ranNums = [], i = nums.length, j = 0; while (i--) { j = Math.floor(Math.random() * (i+1)); ranNums.push(nums[j]); nums.splice(j,1); }</code>
이 알고리즘은 숫자의 무작위 순서를 생성합니다. 범위를 제한하거나 짝수를 지정하려는 경우 그에 따라 숫자를 수정할 수 있습니다.
<code class="javascript">function shuffle(array) { var i = array.length, j = 0, temp; while (i--) { j = Math.floor(Math.random() * (i+1)); // swap randomly chosen element with current element temp = array[i]; array[i] = array[j]; array[j] = temp; } return array; } var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10]);</code>
Fisher-Yates Shuffle은 무작위보다 더 효율적인 대안입니다. 값비싼 배열 작업의 사용을 방지하는 순열 방법입니다.
<code class="javascript">function* shuffle(array) { var i = array.length; while (i--) { yield array.splice(Math.floor(Math.random() * (i+1)), 1)[0]; } }</code>
생성기는 훨씬 더 동적인 옵션을 제공합니다. Yield 및 next 방법을 활용하면 전체 시퀀스를 미리 생성하지 않고도 필요에 따라 섞인 숫자에 액세스할 수 있습니다.
이 접근 방식은 많은 수의 난수가 필요하고 피하려는 경우에 특히 유용합니다. 한꺼번에 기억에 담아두세요.
위 내용은 재귀 없이 JavaScript에서 반복되지 않는 난수를 생성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!