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 相关文章推荐
飞鱼(shqlsl) javascript作品集
Dec 16 Javascript
js 内存释放问题
Apr 25 Javascript
统计jQuery中各字符串出现次数的工具
May 03 Javascript
jQuery Mobile 导航栏代码
Nov 01 Javascript
浅谈javascript中字符串String与数组Array
Dec 31 Javascript
javascript实现仿百度图片的瀑布流加载效果
Apr 20 Javascript
jQuery手风琴的简单制作
May 12 jQuery
基于AngularJS实现的工资计算器实例
Jun 16 Javascript
AngularJS实现tab选项卡的方法详解
Jul 05 Javascript
Koa项目搭建过程详细记录
Apr 12 Javascript
layui表单提交到后台自动封装到实体类的方法
Sep 12 Javascript
浅谈JS for循环中使用break和continue的区别
Jul 21 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用星号隐藏部份用户名、身份证、IP、手机号等实例
2014/04/08 PHP
PHP定时任务延缓执行的实现
2014/10/08 PHP
php读取txt文件并将数据插入到数据库
2016/02/23 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
2019/10/22 PHP
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
2014/11/05 Python
Python标准库之sqlite3使用实例
2014/11/25 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
利用nohup来开启python文件的方法
2019/01/14 Python
python监控进程状态,记录重启时间及进程号的实例
2019/07/15 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
幼师求职信
2014/06/23 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
学校运动会开幕词
2016/03/03 职场文书
浅谈mysql返回Boolean类型的几种情况
2021/06/04 MySQL
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js