[英]Create Javascript Array With 2 Unique Numbers
我正在嘗試執行以下操作:
創建兩個都在一定范圍內且至少大於或小於n
唯一數字。
例如:
范圍是0-600最小“差異”是150
因此,生成的數字可能是:[2,400],[120,310],[82,530]
但不是[900,400]或[200,220]。
那就是我到目前為止所擁有的:
var posYArray = [];
for(i=0; i < 2; i++){
var posY = (Math.random() * 200).toFixed();
if(i < 1){
posYArray.push(posY);
}else{
for(i=0; i < posYArray.length; i++){
if(posY < posYArray[i]+100){
posYArray.push(posY);
}else{
//Restart loop??
}
}
}
}
但這會隨機使瀏覽器崩潰,而且當數字過於接近時,我也不知道重啟循環的好方法...
您可以分兩步執行此操作。
var upperBound = 200,
minDelta = 90,
firstRandom = Math.floor(Math.random() * upperBound);
var validPool = [];
for (var i = 0; i < upperBound; i++) {
if (i < firstRandom - minDelta || i > firstRandom + minDelta) {
validPool.push(i);
}
}
var secondRandom = validPool[Math.floor(Math.random() * validPool.length)];
jsFiddle 。
它可能比隨機選擇和比較要慢,但至少可以保證運行時間:)
您可以移動不選擇數字的間隔,即在0和range
- gap
之間選擇一個隨機數x
,而不是選擇0
和x
之間的第一個數字以及x + gap
和range
之間的第二個數字。 這樣會更有效率。
var range = 600, gap = 150;
var x = Math.floor(Math.random() * (range - gap));
var posX = (Math.random() * (x)).toFixed();
var posY = (Math.random() * (range - x - gap) + x + gap).toFixed();
在O(1)中工作。
那么簡單地嘗試一下呢? 非常容易,當差異遠小於最大大小(例如150和600)時,您就有1/2的可能性很好。
例如:
var posY = (Math.random() * 600).toFixed();
var posX = (Math.random() * 600).toFixed();
while(abs(poX-posY) < 150){
posX = (Math.random() * 600).toFixed()
}
不是那么有效,但是當您只有2個數字來生成時,這將無關緊要!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.