0

我正在编写一个脚本,onload 会将一个类添加到 12 个 DIV 中的随机 4 个,然后从数组中删除 DIV 的 ID。

我有一个包含所有 12 个 DIV ID 的数组设置。

有时当我重新加载页面时,4 个 DIV 具有该类,而其他时候只有 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); }
    }
}
4

4 回答 4

2

当您删除找到的元素时,您传递的是字符串文字而不是变量名:

allGroundShoes.indexOf('randomAllGroundShoes');

由于没有 element 'randomAllGroundShoes',因此永远不会找到该元素,也不会从数组中删除任何元素。

它应该是:

allGroundShoes.indexOf(randomAllGroundShoes);

但是,你不止一次地做同样的事情。你根本不需要检查allGroundShoes.indexOf()。您可以将随机数存储在变量中并再次引用它。但是,即使这也超出了您的需要。只需致电splice()以获取您的价值:

randomAllGroundShoes = allGroundShoes.splice(
    Math.floor(Math.random() * allGroundShoes.length), 1)[0];
$('#'+randomAllGroundShoes).addClass('shoeNegitive');

这样,您只需一步即可检索您的值并将其从数组中删除 - 无需额外查找。

jsfiddle.net/kRNTg

于 2012-11-21T00:36:45.833 回答
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;
}
于 2012-11-21T00:05:10.050 回答
0

我相信您的删除代码是问题所在。尝试将最后两行注释掉的行更改为:

randomShoeID = allGroundShoes.indexOf(randomAllGroundShoes);
if(randomShoeID != -1){ allGroundShoes = allGroundShoes.splice(randomShoeID, 1); }
于 2012-11-21T00:07:41.113 回答
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因为您知道该项目包含在您刚刚从中取出它的数组中。

于 2012-11-21T00:35:36.700 回答