> 웹 프론트엔드 > JS 튜토리얼 > 고유하고 반복되지 않는 결과를 위해 JavaScript의 난수 생성을 개선하는 방법은 무엇입니까?

고유하고 반복되지 않는 결과를 위해 JavaScript의 난수 생성을 개선하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-20 07:59:01
원래의
1029명이 탐색했습니다.

How to Improve Random Number Generation in JavaScript for Unique and Non-Repeating Results?

JavaScript에서 고유한 난수 생성

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿