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 相关文章推荐
JS 控制CSS样式表
Aug 20 Javascript
用js实现层随着内容大小动态渐变改变 推荐
Dec 19 Javascript
jQuery实现数秒后自动提交form的方法
Mar 05 Javascript
JavaScript对象反射用法实例
Apr 17 Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
Oct 12 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
May 12 Javascript
jQuery插件实现图片轮播特效
Jun 16 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
May 09 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
Jul 10 Javascript
vue移动端实现手机左右滑动入场动画
Jun 17 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
Oct 31 Javascript
梳理一下vue中的生命周期
Dec 30 Vue.js
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
深入了解php4(1)--回到未来
2006/10/09 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
javascript时间函数基础介绍
2013/03/28 Javascript
javascript打印输出json实例
2013/11/11 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
js图片上传前预览功能(兼容所有浏览器)
2016/08/24 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
js的对象与函数详解
2019/01/21 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
2020/11/11 Javascript
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
python中根据字符串调用函数的实现方法
2016/06/12 Python
Python 读写文件的操作代码
2018/09/20 Python
python实现图书借阅系统
2019/02/20 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
Python 实现一个计时器
2020/07/28 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
年度考核评语
2014/01/19 职场文书
户外活动策划方案
2014/03/12 职场文书
计算机系本科生求职信
2014/05/31 职场文书
学生检讨书怎么写
2014/10/09 职场文书
幼师中班个人总结
2015/02/12 职场文书
小学生手册家长意见
2015/06/03 职场文书
关于环保的宣传稿
2015/07/23 职场文书
2015年教师国培感言
2015/08/01 职场文书
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python