随机生成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 相关文章推荐
给ListBox添加双击事件示例代码
Dec 02 Javascript
JQuery中$.ajax()方法参数详解及应用
Dec 12 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
Dec 17 Javascript
详解JavaScript中的blink()方法的使用
Jun 08 Javascript
javascript跨域的方法汇总
Oct 23 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
Jan 12 Javascript
JavaScript中文件上传API详解
Apr 01 Javascript
微信小程序 wxapp导航 navigator详解
Oct 31 Javascript
关于Angular2 + node接口调试的解决方案
May 28 Javascript
Vue Ajax跨域请求实例详解
Jun 20 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
Jul 15 Javascript
js制作提示框插件
Dec 24 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网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
javascript数组的使用
2013/03/28 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
2017/02/27 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
2020/08/03 Javascript
解决iview table组件里的 固定列 表格不自适应的问题
2020/11/13 Javascript
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
Django卸载之后重新安装的方法
2017/03/15 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
Python类super()及私有属性原理解析
2020/06/15 Python
python转化excel数字日期为标准日期操作
2020/07/14 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
学年自我鉴定范文
2013/10/01 职场文书
调解协议书
2014/04/16 职场文书
3分钟演讲稿
2014/04/30 职场文书
投资建议书模板
2014/05/12 职场文书
寒假安全保证书
2015/02/28 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
大学生创业计划书
2019/06/24 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
python爬虫之selenium库的安装及使用教程
2021/05/23 Python