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 相关文章推荐
js右键菜单效果代码
Jul 21 Javascript
JavaScript 解析读取XML文档 实例代码
Jul 07 Javascript
JavaScript 面向对象的之私有成员和公开成员
May 04 Javascript
JavaScript日历实现代码
Sep 12 Javascript
javascript五图轮播切换实用版
Aug 17 Javascript
jquery中插件实现自动添加用户的具体代码
Nov 15 Javascript
AngularJS学习笔记之基本指令(init、repeat)
Jun 16 Javascript
bootstrapValidator自定验证方法写法
Dec 01 Javascript
简单实现jQuery弹窗效果
Oct 30 jQuery
小程序组件之仿微信通讯录的实现代码
Sep 12 Javascript
动态内存分配导致影响Javascript性能的问题
Dec 18 Javascript
vue 左滑删除功能的示例代码
Jan 28 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
CI(CodeIgniter)框架介绍
2014/06/09 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
在Python中使用正则表达式的方法
2015/08/13 Python
解决Python requests 报错方法集锦
2017/03/19 Python
python决策树之C4.5算法详解
2017/12/20 Python
Python多项式回归的实现方法
2019/03/11 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
pycharm创建scrapy项目教程及遇到的坑解析
2019/08/15 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
python与js主要区别点总结
2020/09/13 Python
Python日志器使用方法及原理解析
2020/09/27 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
单位工程竣工验收方案
2014/03/16 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
老公爱的承诺书
2014/03/31 职场文书
个人委托书
2014/07/31 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
个人维稳承诺书
2015/05/04 职场文书
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS