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 Prototype对象
Jan 07 Javascript
控制input输入框中提示信息的显示和隐藏的方法
Feb 12 Javascript
js生成随机数的过程解析
Nov 24 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
Aug 18 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
Jan 02 Javascript
JS添加或删除HTML dom元素的方法实例分析
Mar 05 Javascript
如何实现一个简易版的vuex持久化工具
Sep 11 Javascript
webpack HappyPack实战详解
Oct 08 Javascript
webpack DllPlugin xxx is not defined解决办法
Dec 13 Javascript
JavaScript canvas实现雪花随机动态飘落
Feb 08 Javascript
vue样式穿透 ::v-deep的具体使用
Jun 04 Javascript
Vue ECharts实现机舱座位选择展示功能
May 15 Vue.js
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面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
解析ajax事件的调用顺序
2013/06/17 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
小型js框架veryide.librar源代码
2009/03/05 Javascript
javascript入门基础之私有变量
2010/02/23 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
JS定时检测任务任务完成后执行下一步的解决办法
2016/12/22 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
js实现横向拖拽导航条功能
2017/02/17 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
JavaScript fetch接口案例解析
2018/08/30 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
python爬取个性签名的方法
2018/06/17 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
使用Python爬取弹出窗口信息的实例
2020/03/14 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
详解px单位html5响应式方案
2018/03/08 HTML / CSS
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
中科软测试工程师面试题
2012/06/16 面试题
花卉与景观设计系大学生求职信
2013/10/01 职场文书
详细的大学生创业计划书模板
2014/01/27 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书