随机生成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 相关文章推荐
20个非常棒的Jquery实用工具 国外文章
Jan 01 Javascript
jQuery 页面 Mask实现代码
Jan 09 Javascript
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
Jan 15 Javascript
修改file按钮的默认样式实现代码
Apr 23 Javascript
JS Replace()的高级使用方法介绍
Jun 29 Javascript
原生Javascript封装的一个AJAX函数分享
Oct 11 Javascript
js仿QQ邮箱收件人选择与搜索功能
Feb 10 Javascript
AngularJS执行流程详解
Feb 17 Javascript
解决JS表单验证只有第一个IF起作用的问题
Dec 04 Javascript
vuex实现购物车功能
Jun 28 Javascript
JavaScript eval()函数定义及使用方法详解
Jul 07 Javascript
jQuery实现手风琴特效
Jan 11 jQuery
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
smarty循环嵌套用法示例分析
2016/07/19 PHP
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
jQuery实现动态添加和删除input框代码实例
2019/03/29 jQuery
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
祖国在我心中演讲稿600字
2014/05/04 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
介绍信范文
2015/01/31 职场文书
八一建军节慰问信
2015/02/14 职场文书
60句有关成长的名言
2019/09/04 职场文书
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers
golang为什么要统一错误处理
2022/04/03 Golang
Python PIL按比例裁剪图片
2022/05/11 Python