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 相关文章推荐
网页开发中的容易忽略的问题 javascript HTML中的table
Apr 15 Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
Mar 08 Javascript
jquery div 居中技巧应用介绍
Nov 24 Javascript
jQuery实现两款有动画功能的导航菜单代码
Sep 16 Javascript
javascript实现2016新年版日历
Jan 25 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
Apr 05 Javascript
详解Angular路由 ng-route和ui-router的区别
May 22 Javascript
关于使用axios的一些心得技巧分享
Jul 02 Javascript
Windows下Node.js安装及环境配置方法
Sep 18 Javascript
Vue press 支持图片放大功能的实例代码
Nov 09 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
Dec 03 Javascript
三剑客:offset、client和scroll还傻傻分不清?
Dec 04 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中curl和file_get_content的区别
2014/05/10 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
javascript 面向对象继承
2009/11/26 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
2011/07/31 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
python打开文件并获取文件相关属性的方法
2015/04/23 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python随机读取文件实现实例
2017/05/25 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
django多对多表的创建,级联删除及手动创建第三张表
2019/07/25 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
YSL圣罗兰美妆官方旗舰店:购买YSL口红
2018/04/16 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
自荐信模版
2013/10/24 职场文书
幼儿教师寄语集锦
2014/04/03 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
2015年派出所工作总结
2015/04/24 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书