随机生成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实时监听文本框状态的方法
Apr 26 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
Nov 14 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
Oct 11 Javascript
IE下使用cloneNode注意事项分享
Nov 22 Javascript
js用Date对象处理时间实现思路及代码
Jan 31 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
Mar 03 Javascript
Seajs的学习笔记
Mar 04 Javascript
JavaScript简单下拉菜单实例代码
Sep 07 Javascript
jQuery实现带分组数据的Table表头排序实例分析
Nov 24 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
Mar 15 Javascript
夯基础之手撕javascript继承详解
Nov 09 Javascript
原生js实现弹窗消息动画
Nov 20 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计算到指定日期还有多少天的方法
2015/04/14 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
[26:21]浴火之凤-TI4世界冠军Newbee战队纪录片
2014/08/07 DOTA
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
Python中的Descriptor描述符学习教程
2016/06/02 Python
浅谈Django REST Framework限速
2017/12/12 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
python中四舍五入的正确打开方式
2021/01/18 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
创文明城市标语
2014/06/16 职场文书
商务专员岗位职责范本
2014/06/29 职场文书
超市开店计划书
2014/09/15 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题