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 相关文章推荐
解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
Jun 26 Javascript
JavaScript对象学习经验整理
Oct 12 Javascript
8个超实用的jQuery功能代码分享
Jan 08 Javascript
JavaScript转换与解析JSON方法实例详解
Nov 24 Javascript
深入浅析Node.js 事件循环
Dec 20 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
Feb 05 Javascript
浅谈JavaScript for循环 闭包
Jun 22 Javascript
Javascript操作dom对象之select全面解析
Apr 24 Javascript
详解Node.js串行化流程控制
May 04 Javascript
微信小程序使用form表单获取输入框数据的实例代码
May 17 Javascript
element-ui中select组件绑定值改变,触发change事件方法
Aug 24 Javascript
浅谈layui 绑定form submit提交表单的注意事项
Oct 25 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函数
2011/05/31 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
javascript之dhDataGrid Ver2.0.0代码
2007/07/01 Javascript
Javascript 遍历对象中的子对象
2009/07/03 Javascript
javascript getElementsByClassName函数
2010/04/01 Javascript
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
Python类中self参数用法详解
2020/02/13 Python
python 利用toapi库自动生成api
2020/10/19 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
数据库测试通常都包括哪些方面
2015/11/30 面试题
文秘应聘自荐书范文
2014/02/18 职场文书
预备党员综合考察材料
2014/05/31 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL