随机生成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最常用与实用的创建类的代码
Aug 12 Javascript
javascript object array方法使用详解
Dec 03 Javascript
JavaScript 盒模型 尺寸深入理解
Dec 31 Javascript
js保留两位小数使用toFixed实现
Jul 29 Javascript
JavaScript的arguments对象应用示例
Sep 15 Javascript
jQuery实现的向下图文信息滚动效果
May 03 Javascript
PHP+mysql+Highcharts生成饼状图
May 04 Javascript
jquery实现清新实用的网页菜单效果
Aug 28 Javascript
javascript的正则匹配方法学习
Feb 24 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
Nov 16 Javascript
在Js页面通过POST传递参数跳转到新页面详解
Aug 25 Javascript
vue拖拽组件使用方法详解
Dec 01 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 实用代码收集
2010/01/22 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
JavaScript中的函数模式详解
2015/02/11 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
axios 处理 302 状态码的解决方法
2018/04/10 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
python实现贪吃蛇小游戏
2020/03/21 Python
python机器学习实现决策树
2019/11/11 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
3.12植树节活动总结2014
2014/03/13 职场文书
情人节寄语大全
2014/04/11 职场文书
临床护理求职信
2014/04/26 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
停水通知
2015/04/16 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
详解Python常用的魔法方法
2021/06/03 Python