随机生成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框架veryide.librar源代码
Mar 05 Javascript
jquery的选择器的使用技巧之如何选择input框
Sep 22 Javascript
JavaScript中的数值范围介绍
Dec 29 Javascript
js阻止浏览器默认行为的简单实例
May 15 Javascript
AngularJs Understanding the Model Component
Sep 02 Javascript
AngularJS的脏检查深入分析
Apr 22 Javascript
Javascript创建类和对象详解
May 31 Javascript
vue中SPA单页面应用程序详解
Nov 07 Javascript
完美解决axios在ie下的兼容性问题
Mar 05 Javascript
微信小程序 网络通信实现详解
Jul 23 Javascript
vscode 调试 node.js的方法步骤
Sep 15 Javascript
解决vant-UI库修改样式无效的问题
Nov 03 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中文字母数字验证码实现代码
2008/04/25 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
php定时计划任务与fsockopen持续进程实例
2014/05/23 PHP
php获取错误信息的方法
2015/07/17 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
PHP使用数组实现矩阵数学运算的方法示例
2017/05/29 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
判断用户是否在线的代码
2011/03/05 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
python解析中国天气网的天气数据
2014/03/21 Python
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
python批量修改ssh密码的实现
2019/08/08 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
外语系大学生自荐信范文
2014/03/01 职场文书
安全生产演讲稿
2014/05/09 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
高中美术教学反思
2016/02/17 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL