javascript生成不重复的随机数


Posted in Javascript onJuly 17, 2015

题目来源:在慕课学习jQuery过程中一道测试题。

初始时:<ul>元素中仅显示5个<li>元素,其中包含还包括最后一个<li>元素,<a>元素中的显示"更多"字符.

当点击"更多"链接时,自身内容变为"简化",同时,<ul>元素中显示全部的<li>元素.

当点击"简化"链接时,自身内容变为"更多",同时,<ul>元素中仅显示包含最后一个<li>元素在内的5个元素.

核心点:他没讲需隐藏哪几个<li>元素啊,那么我希望列出8个<li>元素,点简化随机隐藏前7个<li>元素中的3个。

思路:

①从0~6中生成3个随机数。

②判断3个随机数是否相等,不相等则执行隐藏操作。

③3随机数有重复,则重新执行函数。

实现:生成0~6的一个随机数

var ran1=parseInt(Math.random()*7); //Math.random()生成[0,1)的一个随机数

完整代码:
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script language="javascript" type="text/javascript" src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
    <title>挑战题</title>
  </head>
  
  <body>
    <ul>
      <li>0</li>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
      <li>6</li>
      <li>7</li>
    </ul>
    <a id="btn" onclick="cli()">简化</a>
  </body>
  <script>
    $(function cli(){
      $("#btn").css("cursor","pointer");
      if($("#btn").html()=="简化"){
      var ran1=parseInt(Math.random()*7);
      var ran2=parseInt(Math.random()*7);
      var ran3=parseInt(Math.random()*7); //①从0~6中生成3个随机数完成
      if(ran1!=ran2&&ran1!=ran2&&ran2!=ran3){ //②判断3个随机数是否相等,不相等则执行操作。
      $('li:eq('+ran1+')').css('display','none');  
      $('li:eq('+ran2+')').css('display','none');    
      $('li:eq('+ran3+')').css('display','none'); 
      $("#btn").html("更多");
      }else{//③3随机数有重复,则重新执行函数。
        cli();
      }
      }
      
      else{
        $("li:hidden").css('display','list-item');
        $("a:contains('更多')").html("简化");
      }
      
      });

  </script>
</html>

收获一:

var ran=parseInt(Math.random()*(max-min+1)+min); //生成一个[min,max]区间的一个随机数

收获二:

反思了下,决定写个在一定[min,max]区间,生成n个不重复的随机数的封装函数。

思路一:先生成n个[min,max]区间随机数,比较是否重复,如重复则返回,再次执行。

演示地址:http://jsbin.com/yupuyehuqa/edit?html,js,output

封装函数:

function my_ran(n,min,max){
 var arr=[];
 for(i=0;i<n;i++){
  arr[i]=parseInt(Math.random()*(max-min+1)+min);
 }
 for(i=0;i<n;i++){
  for(j=i+1;j<n;j++){
   if(arr[i]==arr[j]){
    my_ran(n,min,max);
    return fault;
   }
  }
 }
 return arr;
}

思路二:生成第i个[min,max]区间的随机数,并与之前i-1个数比较,如有重复,令i=i-1;重复生成第i个随机数。

演示地址:http://jsbin.com/zorunotosi/edit?html,js,output

封装函数:

function my_ran2(n,min,max){
 var arr=[];
 for(i=0;i<n;i++){
  arr[i]=parseInt(Math.random()*(max-min+1)+min);
  for(j=0;j<i;j++){
   if(arr[i]==arr[j]){
    i=i-1;
    break;
   }
  }
 }
 return arr;
}

思路三:生成[min,max]区间的一个顺序数组,打乱数组,输出前n个值。

演示地址:http://jsbin.com/zorunotosi/edit?html,js,output

封装函数:

function my_ran3(n,min,max){
 var arr=[];
 var arr2=[];
 for(i=0;i<max-min+1;i++){
  arr[i]=i+min;
 }
 for(var j,x,i=arr.length;i;j=parseInt(Math.random()*i),x=arr[--i],arr[i]=arr[j],arr[j]=x);
 for(i=0;i<n;i++){
  arr2[i]=arr[i];
 }
 return arr2;
}

思路四:生成[min,max]区间的一个顺序数组,从中随机选出一个值,然后在数组中删掉这个值,再选第二个随机值。

演示地址:http://jsbin.com/zorunotosi/edit?html,js,output

封装函数:

function my_ran4(n,min,max){
 var arr=[];
 var arr2=[];
 for(i=0;i<max-min+1;i++){
  arr[i]=i+min;
 }
 for(i=0;i<n;i++){
  var x=parseInt(Math.random()*arr.length);
  arr2[i]=arr[x];
  for(j=x;j<arr.length;j++){
   arr[j]=arr[j+1];
  }
  arr.length=arr.length-1;
 }
 return arr2;
}

太晚了,明儿有空再调格式了。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
关于Blog顶部的滚动导航条代码
Sep 25 Javascript
Jquery 表单取值赋值的一些基本操作
Oct 11 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
Apr 08 Javascript
浅谈jQuery事件绑定原理
Jan 02 Javascript
JQuery实现的图文自动轮播效果插件
Jun 19 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
May 17 Javascript
基于Bootstrap仿淘宝分页控件实现代码
Nov 07 Javascript
bootstrap模态框远程示例代码分享
May 22 Javascript
vue中axios的封装问题(简易版拦截,get,post)
Jun 15 Javascript
vue router导航守卫(router.beforeEach())的使用详解
Apr 19 Javascript
微信小程序左右滚动公告栏效果代码实例
Sep 16 Javascript
使用JavaScript通过前端发送电子邮件
May 22 Javascript
jQuery实现径向动画菜单效果
Jul 17 #Javascript
jquery合并表格中相同文本的相邻单元格
Jul 17 #Javascript
用svg制作富有动态的tooltip
Jul 17 #Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
Jul 17 #Javascript
JavaScript调用浏览器打印功能实例分析
Jul 17 #Javascript
JS判断页面是否出现滚动条的方法
Jul 17 #Javascript
javascript图片预加载实例分析
Jul 16 #Javascript
You might like
PHP 读取文件的正确方法
2009/04/29 PHP
php curl请求信息和返回信息设置代码实例
2015/04/27 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
js动态添加onclick事件可传参数与不传参数
2014/07/29 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
详解vue 实例方法和数据
2017/10/23 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
详解Vue之计算属性
2020/06/20 Javascript
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
[01:04:05]VG vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
python线程信号量semaphore使用解析
2019/11/30 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
户籍证明的格式
2014/01/13 职场文书
行政部工作岗位职责范本
2014/03/05 职场文书
弄虚作假心得体会
2014/09/10 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
实习证明模板
2015/06/16 职场文书
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python