随机生成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 相关文章推荐
JS的IE和Firefox兼容性集锦
Dec 11 Javascript
jquery json 实例代码
Dec 02 Javascript
javascript利用控件对windows的操作实现原理与应用
Dec 23 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
Dec 20 Javascript
javascript验证邮件地址和MX记录的方法
Jun 16 Javascript
JavaScript实现删除,移动和复制文件的方法
Aug 05 Javascript
jquery html动态添加的元素绑定事件详解
May 24 Javascript
JavaScript函数柯里化原理与用法分析
Mar 31 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
Oct 19 Javascript
Vue表单之v-model绑定下拉列表功能
May 14 Javascript
vant 时间选择器--开始时间和结束时间实例
Nov 04 Javascript
低门槛开发iOS、Android、小程序应用的前端框架详解
Oct 16 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
php5中类的学习
2008/03/28 PHP
flash用php连接数据库的代码
2011/04/21 PHP
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
基于jQuery的图片剪切插件
2011/08/03 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
2017/11/17 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
Django如何配置mysql数据库
2018/05/04 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
利用python 下载bilibili视频
2020/11/13 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
中学生励志演讲稿
2014/04/26 职场文书
授权委托书格式范文
2014/08/02 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
Redis中一个String类型引发的惨案
2021/07/25 Redis
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS