HTML5技术

还有更简单的不重复随机数生成方法吗? - ASER_1989

字号+ 作者:H5之家 来源:博客园 2015-11-25 08:20 我要评论( )

这是一个关于javasript的问题。 偶然间想到一个我们经常会用到的东西,生成一组不重复的随机数(比如:生成10个小于32的随机数,不能重复。)。在C#中这压根就不是什么问题,一个contains就能判断一个元素是否在数组中存在,但是到了js里没有一个简单的方式

  这是一个关于javasript的问题。

  偶然间想到一个我们经常会用到的东西,生成一组不重复的随机数(比如:生成10个小于32的随机数,不能重复。)。在C#中这压根就不是什么问题,一个contains就能判断一个元素是否在数组中存在,但是到了js里没有一个简单的方式可以判断某个值是否在数组中是否已经存在。既然没找到相关的函数就只能想想办法了。那是循环呢?还是循环呢?循环?循环?.......

  想了很久,最终想到了这样的一个方法:

  首先利用js对象来判断新的随机数是否已经存在过了。如果没有再加入到对象到属性中和结果数组中。贴上代码:

1 function getNo() { 2 var res = {}, rleng = []; (rleng.length < 10) { 5 var n = Math.round(Math.random() * 31); 6 if (res[n]) { 7 continue; 8 } 9 res[n] = n; 10 rleng.push(n); 11 } 12 return rleng; 13 }

虽然js没有直接可以判断某个元素是否在数组中存在的方法,但可以简单的判断某个属性是否在某个对象中存在。呵呵~,取了个巧。

其实除此之外还有另外的一种方法:

1 function getNos() 2 { 3 var str="",res=[]; 4 while (res.length < 10) { 5 var n = Math.round(Math.random() * 31); 6 if (str.indexOf(n)) { 7 res.push(n); 8 str+=n+","; 9 } 10 } 11 return res; 12 }

两个方法大致思路上都差别不大,一个是利用对象,一个是字符串。

javascript小白,只能想到这里了。如果您有更简单,更有效的方法吗?请帖出来吧。

(@转载请注明出处:)

 

 

 

 

 

  

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 业务订单号生成算法,每秒50W左右,不同机器保证不重复,包含日期可读性好 - 洛城秋色

    业务订单号生成算法,每秒50W左右,不同机器保证不重复,包含日期可

    2017-04-23 12:02

  • 怎样让js循环重复执行过程 - 诩小贝

    怎样让js循环重复执行过程 - 诩小贝

    2016-12-17 13:01

  • ASP.NET 关于GridView 表格重复列合并 - 小飞飞oo

    ASP.NET 关于GridView 表格重复列合并 - 小飞飞oo

    2016-08-23 10:02

  • 窥探算法之美妙——详细讲解寻找最长重复字符串的原理 - cotyb

    窥探算法之美妙——详细讲解寻找最长重复字符串的原理 - cotyb

    2016-02-24 14:21

网友点评
j