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


Posted in Javascript onMay 05, 2018

在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生成指定范围随机数和随机序列,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
javascript中substr,substring,slice.splice的区别说明
Nov 25 Javascript
js鼠标及对象坐标控制属性详细解析
Dec 14 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
Apr 12 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
Jun 07 Javascript
jQuery实现异步获取json数据的2种方式
Aug 29 Javascript
jquery验证邮箱格式并显示提交按钮
Nov 07 Javascript
react.js 获取真实的DOM节点实例(必看)
Apr 17 Javascript
微信小程序request请求后台接口php的实例详解
Sep 20 Javascript
Vue.js 踩坑记之双向绑定
May 03 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
Feb 13 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
May 21 Javascript
linux服务器快速卸载安装node环境(简单上手)
Feb 22 Javascript
JS文件中加载jquery.js的实例代码
May 05 #jQuery
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
May 05 #Javascript
js动态引入的四种方法
May 05 #Javascript
关于HTML5的data-*自定义属性的总结
May 05 #Javascript
深入浅析Vue.js计算属性和侦听器
May 05 #Javascript
详解js跨域请求的两种方式,支持post请求
May 05 #Javascript
vue 注册组件的使用详解
May 05 #Javascript
You might like
PHP 批量删除数据的方法分析
2009/10/30 PHP
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
php使用CURL伪造IP和来源实例详解
2015/01/15 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
捕获关闭窗口的脚本
2009/01/10 Javascript
各种常用的JS函数整理
2013/10/25 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
Element Rate 评分的使用方法
2020/07/27 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
python类型强制转换long to int的代码
2013/02/10 Python
在Django框架中设置语言偏好的教程
2015/07/27 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
python实现简易数码时钟
2021/02/19 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
2020/02/10 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
Python常用断言函数实例汇总
2020/11/30 Python
高中英语教学反思
2014/02/04 职场文书
初一学生评语大全
2014/04/24 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
春节慰问信范文
2015/02/15 职场文书
新员工入职感想
2015/08/07 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书
人力资源部工作计划
2019/05/14 职场文书