随机生成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中void(0)的具体含义解释
Feb 27 Javascript
js汉字转拼音实现代码
Feb 06 Javascript
15条JavaScript最佳实践小结
Aug 09 Javascript
javascript判断机器是否联网的2种方法
Aug 09 Javascript
在JavaScript中使用timer示例
May 08 Javascript
JavaScript中的this关键字使用详解
Aug 14 Javascript
开启BootStrap学习之旅
May 04 Javascript
原生js实现ajax方法(超简单)
Sep 20 Javascript
JavaScript获取当前时间向前推三个月的方法示例
Feb 04 Javascript
小程序自定义模板实现吸顶功能
Jan 08 Javascript
用jQuery实现抽奖程序
Apr 12 jQuery
解决Vue-cli无法编译es6的问题
Oct 30 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中stream(流)的用法
2014/03/25 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
PHP实现活动人选抽奖功能
2017/04/19 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
js实现收缩菜单效果实例代码
2013/10/30 Javascript
JavaScript设计模式之抽象工厂模式介绍
2014/12/28 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
2017/02/05 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
python装饰器使用方法实例
2013/11/21 Python
python变量不能以数字打头详解
2016/07/06 Python
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
Chicco婴儿用品美国官网:汽车座椅、婴儿推车、高脚椅等
2018/11/05 全球购物
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
电大毕业自我鉴定
2014/02/03 职场文书
投资意向书
2014/07/30 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
《分数的意义》教学反思
2016/02/20 职场文书