随机生成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 相关文章推荐
在你的网页中嵌入外部网页的方法
Apr 02 Javascript
页面加载完毕后滚动条自动滚动一定位置
Feb 20 Javascript
javascript检测flash插件是否被禁用的方法
Jan 14 Javascript
JavaScript面向对象程序设计教程
Mar 29 Javascript
JS简单实现仿百度控制台输出信息效果
Sep 04 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
Jan 19 Javascript
js实现从左向右滑动式轮播图效果
Jul 07 Javascript
JS实现非首屏图片延迟加载的示例
Jan 06 Javascript
element ui table 增加筛选的方法示例
Nov 02 Javascript
js 根据对象数组中的属性进行排序实现代码
Sep 12 Javascript
vue.js实现照片放大功能
Jun 23 Javascript
Openlayers实现地图全屏显示
Sep 28 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删除二维数组中的重复值方法
2018/03/12 PHP
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
2013/10/24 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
vue技术分享之你可能不知道的7个秘密
2018/04/09 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
Vue+Element-U实现分页显示效果
2020/11/15 Javascript
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
Python3 修改默认环境的方法
2019/02/16 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
市场营销职业生涯规划书范文
2014/01/12 职场文书
英文自荐信常用句子
2014/03/26 职场文书
建设工地安全标语
2014/06/07 职场文书
企业口号大全
2014/06/12 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
实习证明格式范文
2014/10/14 职场文书
项目安全员岗位职责
2015/02/15 职场文书
python tkinter实现定时关机
2021/04/21 Python