• JavaScript 不重复的随机数


    在 JavaScript 中,一般产生的随机数会重复,但是有时我们需要不重复的随机数,如何实现?本文给于解决方法,需要的朋友可以参考下
     
     
    在 JavaScript 中,一般产生的随机数会重复,但是有时我们需要不重复的随机数,如何实现?下面就来讲解三种方法产生不重复的随机数,并进行比较,看那种方法效率高。

    方法一 
    思路:首先创建一个1到3000的数组,每次取一个数,然后去除数组中取出的这个数, 这样就可以实现永不重复。 
    复制代码代码如下:

    <script type="text/javascript"> 
    var count=3000; 
    var originalArray=new Array;//原数组 
    //给原数组originalArray赋值 
    for (var i=0;i<count;i++){ 
    originalArray[i]=i+1; 

    var d1=new Date().getTime(); 
    for (i=0;i<count;i++){ 
    var index=Math.floor(Math.random()*originalArray.length); //随机取一个位置 
    document.write(index+" , "); 
    originalArray.splice(index,1); 

    var d2=new Date().getTime(); 
    document.write("运算耗时"+(d2-d1)); 
    </script> 

    性能:耗时 1528 毫秒。 

    方法二 
    思路:对方法一的slice方法进行改进,以提高效率。还是从原数组取出一个数, 然后让原数组的这个位置赋值为null 。下一次取数时判断是否为null,如果是null就不取。 
    复制代码代码如下:

    <script type="text/javascript"> 
    var count=3000; 
    var originalArray=new Array;//原数组 
    //给原数组originalArray赋值 
    for (var i=0;i<count;i++){ 
    originalArray[i]=i+1; 

    var d1=new Date().getTime(); 
    for (var num,i=0;i<count;i++){ 
    do{ 
    num=Math.floor(Math.random()*count); 
    }while(originalArray[num]==null); 
    document.write(originalArray[num]+" , "); 
    originalArray[num]=null; 

    var d2=new Date().getTime(); 
    document.write("运算耗时"+(d2-d1)); 
    </script> 

    性能:耗时 290 毫秒。 

    方法三 
    思路:把原数组打散,然后再依次输出, 这样也可以做到随机永不重复,且效率更高。 
    复制代码代码如下:

    <script type="text/javascript"> 
    var count=3000; 
    var originalArray=new Array;//原数组 
    //给原数组originalArray赋值 
    for (var i=0;i<count;i++){ 
    originalArray[i]=i+1; 

    var d1=new Date().getTime(); 
    originalArray.sort(function(){ return 0.5 - Math.random(); }); 
    for (var i=0;i<count;i++){ 
    document.write(originalArray[i]+" , "); 

    var d2=new Date().getTime(); 
    document.write("运算耗时"+(d2-d1)); 
    </script> 

    性能:耗时 229 毫秒。 
    通过性能分析,得出方法三为最佳方案。
  • 相关阅读:
    零基础学python-2.24 一些常用函数
    零基础学python-2.23 模块
    零基础学python-2.22 回到我们的游戏 加入文件和异常
    tcp协议:三次握手四次挥手详解---总结
    centos7安装jmeter + ant
    centos7安装jenkins
    centos7安装tomcat
    centos7安装jdk (jdk-8u161-linux-x64.tar.gz 和 java-1.8.0-openjdk* 介绍)
    波浪场景jp@gc
    阶梯场景jp@gc
  • 原文地址:https://www.cnblogs.com/thinkingthigh/p/3792642.html
Copyright © 2020-2023  润新知