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自带函数备忘 数组
Dec 29 Javascript
csdn 博客中实现运行代码功能实现
Aug 29 Javascript
jquery提升性能最佳实践小结
Dec 06 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
Feb 04 Javascript
JS实现div内部的文字或图片自动循环滚动代码
Apr 19 Javascript
『jQuery』取指定url格式及分割函数应用
Apr 22 Javascript
javascript实现div的显示和隐藏的小例子
Jun 25 Javascript
JS中创建函数的三种方式及区别
Mar 13 Javascript
jquery实现全选、不选、反选的两种方法
Sep 06 Javascript
Vue 样式绑定的实现方法
Jan 15 Javascript
Promise扫盲贴
Jun 24 Javascript
vue实现五子棋游戏
May 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
PHP安全编程之加密功能
2006/10/09 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
js身份证验证超强脚本
2008/10/26 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
jQuery发请求传输中文参数乱码问题的解决方案
2018/05/22 jQuery
微信小程序实现跑马灯效果
2020/10/21 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
Python编程之序列操作实例详解
2017/07/22 Python
对Python3+gdal 读取tiff格式数据的实例讲解
2018/12/04 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
python绘制趋势图的示例
2020/09/17 Python
Python实现手势识别
2020/10/21 Python
python字典按照value排序方法
2020/12/28 Python
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
Intersport西班牙:在线体育商店
2019/11/06 全球购物
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
什么是动态端口(Dynamic Ports)?动态端口的范围是多少?
2014/12/12 面试题
党员岗位承诺口号大全
2014/03/28 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
《长相思》听课反思
2014/04/10 职场文书
应届生求职信范文
2014/05/26 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL
OpenCV-Python实现轮廓的特征值
2021/06/09 Python
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL