對(duì)于生成幾個(gè)互不相同的隨機(jī)數(shù)應(yīng)用的還挺廣泛的师抄,接觸js還沒(méi)多長(zhǎng)時(shí)間,給大家分享兩種方法來(lái)生成不重復(fù)的隨機(jī)數(shù)心肪。
1.使用indexOf方法巧妙的實(shí)現(xiàn)
代碼示例如下:
使用while循環(huán)語(yǔ)句控制隨機(jī)數(shù)的個(gè)數(shù)棵里,首先定義一個(gè)arr數(shù)組作為一個(gè)容器承載隨機(jī)數(shù)诉瓦,運(yùn)用Math.random()*10生成1~10的隨機(jī)數(shù),使用indexOf方法去除相同的隨機(jī)數(shù)漱挎。indexOf方法返回第一次出現(xiàn)子字符串的字符位置系枪,它返回的是一個(gè)整數(shù)值,當(dāng)返回值為-1時(shí)磕谅,表示沒(méi)有此字符串私爷。所以arr.indexOf(num) == -1的意思是當(dāng)arr中沒(méi)有此字符的時(shí)候?qū)㈦S機(jī)數(shù)存入arr中,能實(shí)現(xiàn)生成5個(gè)不同的隨機(jī)數(shù)膊夹。
此外給大家分享一個(gè)在max(最大數(shù))和min(最小數(shù))范圍之間的隨機(jī)數(shù)公式:
var ran = Math.random()*(max-min)+min;
2.使用while循環(huán)來(lái)實(shí)現(xiàn)
示例代碼如下:
定義五個(gè)變量a,b,c,d,e承接生成的五個(gè)隨機(jī)數(shù)衬浑,使用while循環(huán)來(lái)實(shí)現(xiàn),大體思路如下:隨機(jī)數(shù)a作為第一個(gè)數(shù)放刨,第二個(gè)while循環(huán)是:當(dāng)a == b; b在重新生成隨機(jī)數(shù)直到與a 不同時(shí)工秩,保存b; 第三個(gè)while循環(huán)是:當(dāng)c與a,b其中一個(gè)相同時(shí),重新生成隨機(jī)數(shù)c,直到c與a,b都不相同時(shí)助币,保存c;以此類推浪听;實(shí)現(xiàn)每個(gè)隨機(jī)數(shù)都互不相同。
這種方法是我才學(xué)js的幾個(gè)循環(huán)時(shí)根據(jù)自己的邏輯寫(xiě)出來(lái)眉菱,雖然也能實(shí)現(xiàn)效果迹栓,但沒(méi)有第一種方法好,第一種方法一是代碼量少俭缓,還有適用范圍廣克伊,像第二種當(dāng)需要生成的隨機(jī)數(shù)過(guò)多時(shí)就不適用。