随机生成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 相关文章推荐
我也种棵OO树JXTree[js+css+xml]
Apr 02 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
May 06 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
Jan 14 Javascript
jquery清空表单数据示例分享
Feb 13 Javascript
详解javascript跨浏览器事件处理程序
Mar 27 Javascript
星期几的不同脚本写法(推荐)
Jun 01 Javascript
功能强大的Bootstrap组件(结合js)
Aug 03 Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
May 17 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
Jan 26 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
Aug 09 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
Apr 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输出当前进程所有变量/常量/模块/函数/类的示例
2013/11/07 PHP
ThinkPHP惯例配置文件详解
2014/07/14 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
Jquery.addClass始终无效原因分析
2013/09/08 Javascript
js实现点击向下展开的下拉菜单效果代码
2015/09/01 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
如何使用jquery easyui创建标签组件
2015/11/18 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
JS精确判断数据类型代码实例
2019/12/18 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
详解Python中expandtabs()方法的使用
2015/05/18 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
python继承threading.Thread实现有返回值的子类实例
2020/05/02 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
某公司.Net方向面试题
2014/04/24 面试题
医科学校毕业生自荐信
2013/11/09 职场文书
遥感技术与仪器求职信
2014/02/22 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
大学生助学金感谢信
2015/01/21 职场文书
网上祭英烈活动总结
2015/02/04 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
教师读书笔记
2015/06/29 职场文书
单位提档介绍信
2015/10/22 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
Redis批量生成数据的实现
2022/06/05 Redis