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 相关文章推荐
用jQuery技术实现Tab页界面之二
Sep 21 Javascript
javascript使用定时函数实现跳转到某个页面
Dec 25 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
Mar 04 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
May 26 Javascript
jQuery图片轮播功能实例代码
Jan 29 Javascript
js 奇葩技巧之隐藏代码
Aug 11 Javascript
深入理解React中何时使用箭头函数
Aug 23 Javascript
初探JavaScript 面向对象(推荐)
Sep 03 Javascript
浅谈vux之x-input使用以及源码解读
Nov 04 Javascript
了解JavaScript函数中的默认参数
May 30 Javascript
js实现简单分页导航栏效果
Jun 28 Javascript
js实现简单放大镜效果
Mar 07 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
MyEclipse常用配置图文教程
2014/09/11 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
python中while和for的区别总结
2019/06/28 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
Python连接字符串过程详解
2020/01/06 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
什么是servlet
2012/05/08 面试题
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
入学申请自荐信范文
2014/02/26 职场文书
检讨书1000字
2014/10/11 职场文书
强烈推荐:小学生:暑假作息时间表(值得收藏)
2019/07/09 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
canvas实现贪食蛇的实践
2022/02/15 Javascript
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技