随机生成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 相关文章推荐
JQuery 写的个性导航菜单
Dec 24 Javascript
javascript 数据类型转换(parseInt,parseFloat)
Jul 20 Javascript
document.execCommand()的用法小结
Jan 08 Javascript
实例分析js和C#中使用正则表达式匹配a标签
Nov 26 Javascript
JavaScript中join()方法的使用简介
Jun 09 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
Jun 25 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
Apr 12 Javascript
微信小程序使用二次贝塞尔曲线画波浪
Dec 25 Javascript
详解基于webpack&amp;gettext的前端多语言方案
Jan 29 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
May 07 Javascript
vue cli4下环境变量和模式示例详解
Apr 09 Javascript
基于PHP pthreads实现多线程代码实例
Jun 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的Yii框架的基本使用示例
2015/08/21 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
ext 同步和异步示例代码
2009/09/18 Javascript
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
Vue 页面跳转不用router-link的实现代码
2018/04/12 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
JavaScript鼠标拖拽事件详解
2020/04/03 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
python中count函数简单用法
2020/01/05 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
优秀应届生求职信
2014/06/16 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
雷锋的故事观后感
2015/06/10 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书
银行求职信怎么写
2019/06/20 职场文书
pytorch 实现多个Dataloader同时训练
2021/05/29 Python