JS生成不重复随机数(带源码、最简单直观,可扩展抽签)






 生成随机数 



	数字0-9 ,
	英文小写字母a-z ,
	英文大写字母A-Z ,
	长度
	
	
	

这是个完整的网页,可以直接打开看效果。下面是一些解释说明:

1,这里用了数组来储存数字与字母,一是为了简单直观,二是为了可扩展性。可以将它扩展为部门人员、学生之类,还能区别部门与班级进行抽签,只要替换其中的元素即可。

2,大部分的内容都有注释了我觉得不用再多讲,最后讲一下不重复随机数那里,我没有用递归,主要是我本身不太熟悉(野路子),所以自己想了个抽签取签删签的方法,反正我自己能理解就好了,以下解释给大家,如果大家觉得好理解那就用,如果觉得还是递归方便好理解那就改为递归。

讲解:

ary这个数组就是最终要抽签的数组,它是固定不变的,所有参与抽签的元素及它对应的下标也不会变,假设ary=["a","b","c","d","e"],a的下标就永远是0。

然后我根据ary这个数组的长度创建了一个NRary数组,这个数组长度与ary长度相同,数组内容就是签的序号,接上面ary的假设,那NRary=["0","1","2","3","4"]

开始抽签,Math.floor(Math.random()*NRary.length),Math.random()生成[0,1)之间的随机数,与NRary.length=5相乘后得到[0,5)的随机数,Math.floor向下取整,得到o1这个签

取签,假设o1=1,那NRary[o1]=1,则ary[NRary[o1]]=b,这个能理解吧。

删签,NRary.splice(o1,1)就是把NRary[o1]删除了,如上假设,现在NRary=["0","2","3","4"],注意,"1"没了

再抽签,变化的是NRary.length=4,最后生成了[0,4)的随机数

再取签,假设o1=1,此时NRary[o1]=2。因为NRary已经产生了变化,它的"1"没了。所以它不可能取到重复的值。

再删签,NRary.length又变短了,抽过的签又没了,最后结果只有两个,一是生成的随机数足够了,还有签剩余,二是所有的签都被抽完了,至于是哪个结果,就看里面你输入了多少咯。

完。

就不开打赏了,有钱的捧钱场,没钱的捧人场。谢谢。

JS生成不重复随机数(带源码、最简单直观,可扩展抽签)_第1张图片

你可能感兴趣的:(JS生成不重复随机数(带源码、最简单直观,可扩展抽签))