HTML5学堂-码匠 HTML5学堂

您当前位于:DOM 文档操作 ——> 随机产生不重复的数组

随机产生不重复的数组

2015/04/27 15:41:10 | 作者:HTML5学堂(码匠) | 分类:DOM 文档操作 | 关键词:JavaScript,数组,随机数,数组去重

随机产生去重数组

HTML5学堂:数组、字符串、正则,三者应该说是众多开发者的死敌,方法很多,单纯的记住了没有意义,只有灵活应用才是王道~因此,对于此类问题,重要的是基本思路,根据思路回忆学过的知识,之后应用即可。

需求

总共需要在100个数字中,随机抽取10个不重复的数字。

原理

在最初时,设置了一个temp数组,所有的数组元素都是没有定义的。每次生成时使用随机函数以及数学的取整函数进行处理,之后进行判断,判断temp数组中的这个值是否存在。如果不存在,那么将这个数组的元素设置为1(也就是设置为存在状态),之后将获取到的这个num值push到数组当中,再将控制循环的变量加1。从而更好的控制while循环。

第二段代码比第一段代码的优势在于:第一段代码每次需要将当前新值与之前所有的值相对比,而且即便是生成的数字和之前数字不同,但仍要进行比较。也就是说,从第一个数到最后一个数,这10个数字的生成,如果是10个数字本身都没有任何重复的话(也就是直接符合要求),那么需要执行if判断语句10次,执行比较45次。而对于第二种方法,如果10个数字本身没有任何重复的话(也就是直接符合要求),那么只需要执行10次的判断语句,而不需要执行其他内容。从代码的运行上来说,性能要更好~~~

欢迎沟通交流~HTML5学堂

随机产生去重数组 方法1

  1. var result = [];
  2. for(var j = 0; j < 10; j++) {
  3.     result[j] = Math.round( Math.random() * 100 );
  4.     if(j > 0) {
  5.         for(var m = j - 1; m >= 0; m--) {
  6.             if(result[j] == result[m]) {
  7.              j--;
  8.              break;
  9.             }
  10.         }
  11.     }
  12. }

随机产生去重数组 方法2

代码中for循环和if语句嵌套的层次太多,如果不是随机取10个数,而是取更多的数的话,这样for循环的次数太多了,代码执行的时间也会变长。所以思考使用空间换时间的方式,来简化代码,并且减少语句的嵌套,代码如下:

  1. var result = [];
  2. var temp = [];
  3. var len = 0;
  4. var num;
  5. while(len < 10){
  6.     num = Math.round( Math.random() * 100 );
  7.     if(!temp[num]) {
  8.         temp[num] = 1;
  9.         result.push(num);
  10.         len++;
  11.     }
  12. }

欢迎沟通交流~HTML5学堂

微信公众号,HTML5学堂,码匠,原创文章,WEB前端,技术分享

HTML5学堂

原创前端技术分享

HTML5学堂,HTML5,WEB,前端,视频课程,技术视频,学习视频,面试,JS

原创视频课程

用心打造精品课程

微信小程序,决胜前端,面试题,面试题集合,前端,HTML5,真题

小程序-决胜前端

前端面试题宝库

原创书籍,学习书籍,书籍推荐,HTML5布局之路,HTML5,WEB前端

HTML5布局之路

非传统模式讲解前端

iOS,APP,码集,案例交互,JavaScript学习,WEB前端,HTML5

iOS APP 码集

案例交互式学习JS