随机生成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 相关文章推荐
JavaScript 对话框和状态栏使用说明
Oct 25 Javascript
Jquery进度条插件 Progress Bar小问题解决
Jul 12 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
Oct 14 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
Aug 19 Javascript
jQuery+正则+文本框只能输入数字的实现方法
Oct 07 Javascript
Require.JS中的几种define定义方式示例
Jun 01 Javascript
深入理解Angular中的依赖注入
Jun 26 Javascript
原生js 封装get ,post, delete 请求的实例
Aug 11 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
Sep 19 jQuery
微信小程序模板和模块化用法实例分析
Nov 28 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
Apr 26 Javascript
Ajax获取node服务器数据的完整步骤
Sep 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学习之PHP表达式
2006/10/09 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
python 远程统计文件代码分享
2015/05/14 Python
Python中每次处理一个字符的5种方法
2015/05/21 Python
Python引用模块和查找模块路径
2016/03/17 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
Python collections模块使用方法详解
2019/08/28 Python
Python是什么 Python的用处
2020/05/26 Python
keras.layer.input()用法说明
2020/06/16 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
全球异乡人的跨境社交电商平台:Kouhigh口嗨网
2020/07/24 全球购物
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
新闻专业毕业生英文求职信
2014/03/19 职场文书
合理化建议书
2015/02/04 职场文书
2015年采购工作总结
2015/04/10 职场文书
开除员工通知
2015/04/22 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
源码解读Spring-Integration执行过程
2021/06/11 Java/Android
Python socket如何解析HTTP请求内容
2022/02/12 Python