随机生成10个不重复的0-100的数字(实例讲解)


Posted in Javascript onAugust 16, 2017

在面试时,面试官问了我一道js题:随机生成一个含有10个元素的数组,且元素为0-100的不重复的整数。当时的第一反应是for循环生成10个数字,但是可能会有重复的情况;进一步思考,需要对生成的数字进行验证才能放到数组里面,但是问题来了,如果恰好有重复的,那我之前for循环生成的10个数字就不够了。当时回答的不好,回来后再仔细思考一下,想出了2中解决方案,第一种其实是尝试过程中得出的,还是第二种比较好。

第一种:

function random () {
var arr = [];

for (var i = 0; i < 100; i++) {//生成循环100次,生成100个数字。该方法最大的弊端,为了避免有重复的情况导致数组不足10个元素,所以生成较多的数字
  
var num = Math.floor(Math.random() * 100);//生成0-100的随机整数
  
if (arr.length == 0) {
  

arr.push(num);//数组为空时直接放入数组
  
} else {
  

for (var j = 0; j < arr.length; j++) {//循环已存在的数组
  


if (arr.join(',').indexOf(num) < 0 && arr.length <= 10) {//判断已存在数组中是否已有刚生成的数字,如没有且数组长度不足10才将num放入arr
  



arr.push(num);                    //这样又会导致生成的大部分数字被arr.length <= 10排除掉了,浪费性能
  


}
  

}
  
}
  }
}

第二种:

function random () {
var arr = [];

while(arr.length < 10) {//原数组长度为0,每次成功添加一个元素后长度加1,则当数组添加最后一个数字之前长度为9即可


var num = Math.floor(Math.random() * 100);//生成一个0-100的随机整数


if (arr.length === 0) {//如果数组长度为0则直接添加到arr数组



arr.push(num);


} else {



for (var i = 0; i < arr.length; i++) {//当新生成的数字与数组中的元素不重合时则添加到arr数组




if (arr.join(',').indexOf(num) < 0) {





arr.push(num);




} 



}


}

}
}

看到了Dream_It_Possible的回复,多谢,写的比我好,查询数组中时候是否有某个元素时,我先用了indexOf,结果报错了,我也没有细究,就将数组转化为字符串再验证,看了他的代码我又去查了一下,数组也是有这个方法的。

下面附上他写的代码:

function random(len, start, end) {
var arr = [];

function _inner(start, end) {


var span = end - start;


return parseInt(Math.random() * span + start)

}

while (arr.length < len) {


var num = _inner(start, end);



if (arr.indexOf(num) == -1) {




arr.push(num);



}


}


return arr;

}

以上这篇随机生成10个不重复的0-100的数字(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中双叹号(!!)作用示例介绍
Apr 10 Javascript
js实现checkbox全选和反选示例
May 01 Javascript
javascript操作excel生成报表示例
May 08 Javascript
Jquery 实现图片轮换
Jan 28 Javascript
javascript实现将文件保存到本地方法汇总
Jul 26 Javascript
javascript bom是什么及bom和dom的区别
Nov 26 Javascript
jQuery实现查找最近父节点的方法
Jun 23 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
Apr 27 Javascript
Angularjs上传文件组件flowjs功能
Aug 07 Javascript
AngularJS 打开新的标签页实现代码
Sep 07 Javascript
在 Angular中 使用 Lodash 的方法
Feb 11 Javascript
React通过redux-persist持久化数据存储的方法示例
Feb 14 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
Aug 16 #Javascript
基于js 本地存储(详解)
Aug 16 #Javascript
基于Vue实例生命周期(全面解析)
Aug 16 #Javascript
基于JQuery的Ajax方法使用详解
Aug 16 #jQuery
angular或者js怎么确定选中ul中的哪几个li
Aug 16 #Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
Aug 16 #Javascript
label+input实现按钮开关切换效果的实例
Aug 16 #Javascript
You might like
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
php通过各种函数判断0和空
2020/07/04 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
jquery特效 幻灯片效果示例代码
2013/07/16 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
js选项卡的实现方法
2015/02/09 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
vue框架搭建之axios使用教程
2018/07/11 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
Python常用列表数据结构小结
2014/08/06 Python
在Python中使用模块的教程
2015/04/27 Python
详解Django中间件执行顺序
2018/07/16 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
python实现AES加密和解密
2019/03/27 Python
django 信号调度机制详解
2019/07/19 Python
python Kmeans算法原理深入解析
2019/08/23 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
Python可以实现栈的结构吗
2020/05/27 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
经典搞笑版检讨书
2015/02/19 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
Python制作春联的示例代码
2022/01/22 Python
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript