JavaScript 중복 되 지 않 는 난수

3062 단어
자 바스 크 립 트 에서 일반적으로 발생 하 는 랜 덤 수 는 중복 되 지만, 때때로 우 리 는 중복 되 지 않 는 랜 덤 수가 필요 합 니 다. 어떻게 실현 합 니까?본 고 는 해결 방법 에 있어 서 필요 한 친구 에 게 참고 할 수 있다.
 
 
자 바스 크 립 트 에서 일반적으로 발생 하 는 랜 덤 수 는 중복 되 지만, 때때로 우 리 는 중복 되 지 않 는 랜 덤 수가 필요 합 니 다. 어떻게 실현 합 니까?다음은 세 가지 방법 으로 중복 되 지 않 는 임 의 수 를 만 들 고 비교 해 보면 효율 이 높다.
방법 1 
사고: 먼저 1 부터 3000 까지 의 배열 을 만 들 고 매번 에 하나의 수 를 취한 다음 에 배열 에서 꺼 낸 이 수 를 제거 하면 영원히 중복 되 지 않 을 수 있 습 니 다. 
 
     
  <br>var count=3000;  <br>var originalArray=new Array;//   <br>// originalArray   <br>for (var i=0;i<count;i++){  <br>originalArray[i]=i+1;  <br>}  <br>var d1=new Date().getTime();  <br>for (i=0;i<count;i++){  <br>var index=Math.floor(Math.random()*originalArray.length); //   <br>document.write(index+" , ");  <br>originalArray.splice(index,1);  <br>}  <br>var d2=new Date().getTime();  <br>document.write(" "+(d2-d1));  <br> 

성능: 1528 밀리초 소모. 
방법 2 
사고방식: 방법 1 의 slice 방법 을 개선 하여 효율 을 높 인 다.아니면 원래 배열 에서 하나의 수 를 꺼 내 서 원래 배열 의 이 위 치 를 null 로 할당 합 니까?다음 취 수 는 null 인지 여 부 를 판단 하고 null 이면 취하 지 않 습 니 다. 
 
     
  <br>var count=3000;  <br>var originalArray=new Array;//   <br>// originalArray   <br>for (var i=0;i<count;i++){  <br>originalArray[i]=i+1;  <br>}  <br>var d1=new Date().getTime();  <br>for (var num,i=0;i<count;i++){  <br>do{  <br>num=Math.floor(Math.random()*count);  <br>}while(originalArray[num]==null);  <br>document.write(originalArray[num]+" , ");  <br>originalArray[num]=null;  <br>}  <br>var d2=new Date().getTime();  <br>document.write(" "+(d2-d1));  <br> 

성능: 290 밀리초 소모. 
방법 
사고방식: 원수 조 를 흩 어 뜨 린 다음 에 순서대로 출력 하면 무 작위 로 영원히 반복 되 지 않 고 효율 이 더욱 높다. 
 
     
  <br>var count=3000;  <br>var originalArray=new Array;//   <br>// originalArray   <br>for (var i=0;i<count;i++){  <br>originalArray[i]=i+1;  <br>}  <br>var d1=new Date().getTime();  <br>originalArray.sort(function(){ return 0.5 - Math.random(); });  <br>for (var i=0;i<count;i++){  <br>document.write(originalArray[i]+" , ");  <br>}  <br>var d2=new Date().getTime();  <br>document.write(" "+(d2-d1));  <br> 

성능: 229 밀리초 소모. 
성능 분석 을 통 해 방법 세 가 지 를 얻 는 것 이 가장 좋 은 방안 이다.
다음으로 전송:https://www.cnblogs.com/thinkingthigh/p/3792642.html

좋은 웹페이지 즐겨찾기