[英]Get random item from array, within a for loop, then remove from array
我正在寫一個腳本,onload會將一個類添加到12個DIV的隨機4中,然后從數組中刪除DIV的ID。
我有一個陣列設置,其中包含所有12個DIV ID。
有時當我重新加載頁面時,4個DIV'S有該課程,有時只有3個DIV有該課程。
有點堅持為什么會發生這種情況。 我注釋掉了從數組代碼中刪除 ,看看是否是問題,但仍然是同樣的問題。
這是我的代碼:
//Randomize Which Shoes Are Positive And Negative
function randomizeShoes(){
allGroundShoes = new Array('ground_black_1','ground_black_2','ground_brown_1','ground_brown_2','ground_clown_1','ground_clown_2','ground_disco_1','ground_disco_2','ground_moccasins_1','ground_moccasins_2','ground_red_1','ground_red_2');
for(var i=0; i < 4; i++){
randomAllGroundShoes = allGroundShoes[Math.floor(Math.random() * allGroundShoes.length)];
$('#'+randomAllGroundShoes+'').addClass('shoeNegitive');
//randomShoeID = allGroundShoes.indexOf('randomAllGroundShoes');
//if(randomShoeID != -1){ allGroundShoes.splice(randomShoeID, 1); }
}
}
刪除找到的元素時,傳入的是字符串文字而不是變量名:
allGroundShoes.indexOf('randomAllGroundShoes');
由於沒有元素'randomAllGroundShoes'
,因此永遠不會找到該元素,並且不會從數組中刪除任何元素。
它應該是:
allGroundShoes.indexOf(randomAllGroundShoes);
但是,你不止一次地做同樣的事情。 您根本不需要檢查allGroundShoes.indexOf()
。 您可以將隨機數存儲在變量中並再次引用它。 但是,即使這比你需要的還要多。 只需調用splice()
來獲取您的值:
randomAllGroundShoes = allGroundShoes.splice(
Math.floor(Math.random() * allGroundShoes.length), 1)[0];
$('#'+randomAllGroundShoes).addClass('shoeNegitive');
這樣,您可以在一個步驟中檢索您的值並將其從數組中刪除 - 無需其他查找。
可能,相同的數字可能會生成兩次。
在這種情況下,如果已使用該號碼,則必須有一個檢查機制。
你可以做的是生成一個4個唯一隨機數的數組,並通過它來設置類。
var unqiue_arr = []
while(arr.length < 8){
var randomnumber=Math.floor(Math.random()*12)
var found=false;
for(var i=0;i<3;i++){
if(unqiue_arr[i]==randomnumber){found=true;break}
}
if(!found)unqiue_arr[unqiue_arr.length]=randomnumber;
}
我相信你刪除代碼是個問題。 嘗試將最后兩個注釋掉的行更改為:
randomShoeID = allGroundShoes.indexOf(randomAllGroundShoes);
if(randomShoeID != -1){ allGroundShoes = allGroundShoes.splice(randomShoeID, 1); }
帶有注釋掉行的代碼存在的問題是,當項目未被刪除時,隨機選擇可能會選擇兩次或更多次。
您注釋掉的行有同樣的問題。 你確實搜索了allGroundShoes.indexOf('randomAllGroundShoes');
其中(是一個字符串而不是變量)從未包含在數組中。
請改用此代碼:
function randomizeShoes(){
allGroundShoes = ['ground_black_1','ground_black_2','ground_brown_1','ground_brown_2','ground_clown_1','ground_clown_2','ground_disco_1','ground_disco_2','ground_moccasins_1','ground_moccasins_2','ground_red_1','ground_red_2'];
for (var i=0; i<4; i++){
var randomShoeID = Math.floor(Math.random() * allGroundShoes.length);
var randomAllGroundShoes = allGroundShoes[randomShoeID];
$('#'+randomAllGroundShoes+'').addClass('shoeNegitive');
allGroundShoes.splice(randomShoeID, 1);
}
}
不需要搜索您已經知道的項目的索引,並且不需要檢查-1
因為您知道該項目包含在您剛剛將其拉出的數組中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.