JavaScript에서 반복되지 않는 난수를 생성하면 Chrome의 오류 보고서에서 알 수 있듯이 문제가 발생합니다. 질문에 제시된 함수는 고유한 숫자를 보장하기 위해 개선이 필요합니다.
대안 접근 방식 1: 무작위 순열
난수 함수를 반복적으로 호출하지 않으려면 다음을 생성하는 것이 좋습니다. 처음에는 숫자의 무작위 순열. 다음 코드 조각은 1에서 10 사이의 숫자에 대해 이를 수행합니다.
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); }
이 접근 방식은 사용하지 않는 숫자를 찾는 데 처리 시간이 길어지는 위험을 제거합니다.
대체 접근 방식 2: Fisher –Yates Shuffle
Fisher–Yates Shuffle로 알려진 더 효율적인 방법을 사용할 수 있습니다.
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]);
대체 접근 방식 3: 생성기
또 다른 옵션은 생성기를 활용하는 것입니다.
function* shuffle(array) { var i = array.length; while (i--) { yield array.splice(Math.floor(Math.random() * (i+1)), 1)[0]; } }
사용 방법:
var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10]); ranNums.next().value; // first random number from array ranNums.next().value; // second random number from array ranNums.next().value; // etc.
접근 방식 선택은 애플리케이션의 특정 요구 사항과 제약 조건에 따라 다릅니다.
위 내용은 고유하고 반복되지 않는 결과를 위해 JavaScript의 난수 생성을 개선하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!