JavaScript生成指定范围随机数和随机序列的方法

所属分类: 网络编程 / JavaScript 阅读数: 1078
收藏 0 赞 0 分享

在JavaScript中我们经常使用Math.random()方法生成随机数,但是该方法生成的随机数只是0-1之间的随机数。先看如下常用方法的特征:

•1.Math.random(); 结果为0-1间的一个随机数(包括0,不包括1)

•2.Math.floor(num); 参数num为一个数值,函数结果为num的整数部分。与取整数的parseInt(num)方法一样。

•3.Math.round(num); 参数num为一个数值,函数结果为num四舍五入后的整数。

•4.Math.ceil(num); 返回大于等于n的最小整数。

合理使用上述方法生成指定范围的随机数:

包含最小值不包含最大值的情况:

  parseInt(num)取整,将传入的num向小的整数转化。将Math.random()乘以最大和最小的差值,在用parseInt处理(注意此时的范围是【0-差值)),再加上最小值,就能得到包括最小值但不包括最大值的整数。

 获取包含最小值但不包括最大值的随机数,用如下函数实现:

function getRandom1(start, end) {
      var length = end - start;
      var num = parseInt(Math.random() * (length) + start);
      return num;
    }

包括最大值但不包含最小值的情况:

  Math.ceil(num)取得大于等于num的最小整数,也就是将传入的num向大的整数转化。将Math.random()乘以最大和最小的差值,在用Math.ceil()处理(注意此时的范围是(0-差值】),在加上最小值,就能得到不包括最小值但包括最大值的整数。也就是将上面情况的parseInt改为Math.ceil()

获取包含最大值但不包括最小值的随机数,用如下函数实现:

 function getRandom1(start, end) {
    var length = end - start;
    var num = Math.ceil(Math.random() * (length) + start);
    return num;
  }

最大值和最小值都包含的情况:

  最大值和最小值都包含,此时可取值的范围相比于上述两种情况已经 扩大1。在生成随机数阶段,就要将可能生成随机数的范围扩大1。使用parseInt向小的值取整可行,用Math.ceil(num)往大的值转化也可以(转化后需要-1)。不管采用哪种方式,关键在于生成随机数阶段将范围加1.

采用parseInt的方法

function getRandom1(start, end) {
    var length = end - start + 1;
    var num = parseInt(Math.random() * (length) + end);
    return num;
  }

--------------------------------------------------------------------------------

  一些时候,仅仅生成随机数是不够的,还需要将指定范围的数值,按照随机顺序排列。我们将这个问题转化为生成随机数后加入数组并避免重复的问题。每次循环顺序生成的数是随机的,按照顺序加入数组,以此实现数值大小的随机排列。

生成指定范围的随机数序列:

  随机序列可直接通过sort排序方法实现,将一个包含一组按顺序排列的数字元素,调用sort方法,通过函数传入随机生成的值(可能为正可能为负),就可以将顺序打乱,得到该数组的随机序列。

如下:getNum()返回的是数字1-10按顺序排列的数组,则得到的numArr就是1-10的随机序列:

  var numArr = getNum().sort(function () {
        return Math.random() - 0.5;
      });

自己写逻辑生成随机序列也是可行的:

  定义存储随机数的数组,然后循环生成随机数,生成之后到已有数组中查找,如果存在,将标记变为false表示产生的随机数重复,根据标记值来决定是否加入数组。若加入数组成功,则数组下标index(表示数组元素个数)自增,满足条件退出循环。下面例子实现5-10之间的随机序列(下面案例是左右包含的):

function getOrder(start, end) {
      var length = end - start;
      var myorder = new Array();
      var index = 0;
      while (index < length+1) {
        var flag = true;
        var num = parseInt(Math.random() * (length + 1));
        for (var i in myorder) {
          if (myorder[i] == num) {
            flag = false;
          }
        }
        if (flag == true) {
          myorder[index] = num;
          index++;
        }
      }
      alert(myorder.length);
      alert(myorder);
    }
getOrder(5, 10);

以上所述是小编给大家介绍的JavaScript生成指定范围随机数和随机序列,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

更多精彩内容其他人还在看

jQuery 行级解析读取XML文件(附源码)

项目中应用jQuery解析读取XML语言配置文件来实现语言的调度。这是jQuery解析读取XML文件功能的测试源码,现拿出来分享。
收藏 0 赞 0 分享

JS 文件本身编码转换 图文教程

JS编码转换,这句话本身就是一句具有二重义的话。通常理解为JS文件里能转换编码的代码,但是,我所碰到的问题并不是这样的,是要解决JS文件本身的编码问题,它是UTF-8编码的还是ANSI编码的?
收藏 0 赞 0 分享

jQuery Ajax之$.get()方法和$.post()方法

load()方法通常用来从Web服务器上获取静态的数据文件,然而这并不能体现Ajax的全部价值。在项目中,如果需要传递一些参数给服务器中的页面,那么可以使用$.get()或者$.post()方法(或者是后面要讲解到的$.ajax方法)。
收藏 0 赞 0 分享

jQuery Ajax之load()方法

jQuery对Ajax操作进行了封装,在jQuery中$.ajax()方法属于最底层的方法,第2层是laod()、$.get()和$.post()方法,第3层是$.getScript()和$.getJSON()方法。
收藏 0 赞 0 分享

JavaScript 核心参考教程 内置对象

JavaScript 是根据 "ECMAScript"标准制定的网页脚本语言。这个标准由 ECMA 组织发展和维护。ECMA-262 是正式的 JavaScript 标准。
收藏 0 赞 0 分享

JavaScript 核心参考教程 RegExp对象

JavaScript 核心参考教程RegExp对象,学习正则表达式的朋友可以参考下。
收藏 0 赞 0 分享

javascript hashtable实现代码

javascript中没有像c#,java那样的哈希表(hashtable), 然而,javascript中的Array也只有一些类似于'哈希表'的非常简单功能。
收藏 0 赞 0 分享

百度留言本js 大家可以参考下

百度留言本js 大家可以参考下。
收藏 0 赞 0 分享

javascript 判断某年某月有多少天的实现代码 推荐

以前写网页的时候,经常碰到选择日期的问题,其实就是判断某年某月有多少天。
收藏 0 赞 0 分享

让iframe子窗体取父窗体地址栏参数(querystring)

突然用到,记录一下,对地址栏字符串用正则处理最好,有时间研究一下。 主要是思路。
收藏 0 赞 0 分享
查看更多