还有更简单的不重复随机数生成方法吗?
2015-11-24 14:31
323 查看
这是一个关于javasript的问题。
偶然间想到一个我们经常会用到的东西,生成一组不重复的随机数(比如:生成10个小于32的随机数,不能重复。)。在C#中这压根就不是什么问题,一个contains就能判断一个元素是否在数组中存在,但是到了js里没有一个简单的方式可以判断某个值是否在数组中是否已经存在。既然没找到相关的函数就只能想想办法了。那是循环呢?还是循环呢?循环?循环?.......
想了很久,最终想到了这样的一个方法:
首先利用js对象来判断新的随机数是否已经存在过了。如果没有再加入到对象到属性中和结果数组中。贴上代码:
虽然js没有直接可以判断某个元素是否在数组中存在的方法,但可以简单的判断某个属性是否在某个对象中存在。呵呵~,取了个巧。
其实除此之外还有另外的一种方法:
两个方法大致思路上都差别不大,一个是利用对象,一个是字符串。(感谢细心的朋友提出宝贵的意见,这里加上[]防止indexof在类似12和2这样多情况下出现bug)。
下面是@double Net和过客冲冲的方法,这是一种很科学的方法!(悄悄的改造了下):
javascript小白,只能想到这里了。如果您有更简单,更有效的方法吗?请帖出来吧。
(@转载请注明出处:http://www.cnblogs.com/aser1989/p/4991530.html)
偶然间想到一个我们经常会用到的东西,生成一组不重复的随机数(比如:生成10个小于32的随机数,不能重复。)。在C#中这压根就不是什么问题,一个contains就能判断一个元素是否在数组中存在,但是到了js里没有一个简单的方式可以判断某个值是否在数组中是否已经存在。既然没找到相关的函数就只能想想办法了。那是循环呢?还是循环呢?循环?循环?.......
想了很久,最终想到了这样的一个方法:
首先利用js对象来判断新的随机数是否已经存在过了。如果没有再加入到对象到属性中和结果数组中。贴上代码:
function getNo() { var res = {}, rleng = []; while (rleng.length < 10) { var n = Math.round(Math.random() * 31); if (res ) { continue; } res = n; rleng.push(n); } return rleng; }
虽然js没有直接可以判断某个元素是否在数组中存在的方法,但可以简单的判断某个属性是否在某个对象中存在。呵呵~,取了个巧。
其实除此之外还有另外的一种方法:
function getNos() { var str="",res=[]; while (res.length < 10) { var n = Math.round(Math.random() * 31); if (str.indexOf("["+n+"]")) { res.push(n); str+="["+n+"],"; } } return res; }
两个方法大致思路上都差别不大,一个是利用对象,一个是字符串。(感谢细心的朋友提出宝贵的意见,这里加上[]防止indexof在类似12和2这样多情况下出现bug)。
下面是@double Net和过客冲冲的方法,这是一种很科学的方法!(悄悄的改造了下):
var getUnique=function(min,max,count){ var arr=[]; for(var i=min;i<max;i++){ arr.push(i); } arr=arr.sort(function(l,r){ return Math.random()>Math.random(); }); return arr.slice(0,count); }; //getUnique(1,20,5) //[10, 1, 3, 16, 5]
javascript小白,只能想到这里了。如果您有更简单,更有效的方法吗?请帖出来吧。
(@转载请注明出处:http://www.cnblogs.com/aser1989/p/4991530.html)
相关文章推荐
- 01-2-SpringMVC-为Myeclipse安装spring的插件
- Android 中的 Service 全面总结
- 手机端根据区域和距离弹出选择效果
- Webservise的使用(C#创建,Android调用)
- 浅谈android 屏幕适配中 dp和sp的区别
- 忘掉CMMI
- 学习笔记 一
- 统计查询
- Python读取excel表格操作之xlrd
- PHP warning Cannot modify header information - headers already sent by (output started at...
- Reboot server stuck at “Press ESC in 1 seconds to skip startup.nsh”
- PHP 魔术常量__FUNCTION__与__METHOD__的区别
- 01-1-SpringMVC-怎么从官网下载Spring的jar包
- win7/win8.1/win10系统下如何配置Java环境变量 Java环境变量的配置教程介绍
- js中操作cookie
- Handler发送信息方法的区别
- markdown编辑器实现笔记
- 利用@media screen实现网页布局的自适应
- 解决Android SDK下载和更新失败的方法
- git pull