在JavaScript中获取不重复的随机数

JavaScript的Math对象提供了random()方法,可以获取一个[0,1)的随机数

利用这个方法,取一个随机数容易

但要是取一个随机并且不重复的数,就需要绕点弯子

试着更换一下思路

获取随机数并不一定需要随机取得一个值,并前后判断是否重复

可以首先创建一个范围,并以该范围所有的值创建一个数组

将数组的排序随机

那么从该数组中按线性获取的值,不也就是随机不定的吗

且由于只是重新排列了数组,数组中永远不会出现重复的值

只需利用Array的sort()方法和Math.random()方法就可以实现获取随机不重复的功能

简单讲一下Array的sort()方法:

sort()用于数组,如果不传入参数,那么它会对数组的每一项调用toString()方法,再对每一个字符串进行比较排序(按照首字符的编码大小排序)

若传入参数,会按照参数的正负情况对每两个进行该方法的数组项排序。

无参的方法调用在升降排序number类型数据时并不好用,所以一般给sort()方法传入一个“比较”函数,以此为number类型的数组项升降排序

利用该方法的排序特性,随机这种排序就可以达到随机打乱数组的效果

以下是该方法的实现:

function sjsz(num){
	var ary = [];					//创建一个空数组用来保存随机数组
	for(var i=0; i<num; i++){			//按照正常排序填充数组
		ary[i] = i+1;
	}
	ary.sort(function(){
		return 0.5-Math.random();		//返回随机正负值
	});
	return ary;					//返回数组
}

给函数 sjsz 传入一个 num 参数已确定随机数组范围(0 - num 之间)

之后函数会返回一个不重复随机数组成的数组

猜你喜欢

转载自blog.csdn.net/qq282465134/article/details/70186941