我正在编写一个脚本,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); }
}
}
答案 0 :(得分:2)
删除找到的元素时,传入的是字符串文字而不是变量名:
allGroundShoes.indexOf('randomAllGroundShoes');
由于没有元素'randomAllGroundShoes'
,因此永远不会找到该元素,并且不会从数组中删除任何元素。
应该是:
allGroundShoes.indexOf(randomAllGroundShoes);
但是,你不止一次地做同样的事情。您根本不需要检查allGroundShoes.indexOf()
。您可以将随机数存储在变量中并再次引用它。但是,即使这比你需要的还要多。只需致电splice()
即可获得您的价值:
randomAllGroundShoes = allGroundShoes.splice(
Math.floor(Math.random() * allGroundShoes.length), 1)[0];
$('#'+randomAllGroundShoes).addClass('shoeNegitive');
这样,您可以一步检索您的值并将其从数组中删除 - 无需额外查找。
答案 1 :(得分:0)
可能同样的数字可能会被生成两次。
在这种情况下,如果已经使用过这个号码,你必须有一个检查机制。
你可以做的是生成一个包含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;
}
答案 2 :(得分:0)
我相信你删除代码是个问题。尝试将最后两个注释掉的行更改为:
randomShoeID = allGroundShoes.indexOf(randomAllGroundShoes);
if(randomShoeID != -1){ allGroundShoes = allGroundShoes.splice(randomShoeID, 1); }
答案 3 :(得分:0)
带有注释掉行的代码存在以下问题:当项目未被删除时,随机选择可能会选择两次或更多次。
您注释掉的行有同样的问题。您确实搜索了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
,因为您知道该项目包含在您刚拔出的数组中。