javascript - 在 for 循环中从数组中获取随机项,然后从数组中删除

标签 javascript jquery arrays random array-splice

我正在编写一个脚本,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); }
    }
}

最佳答案

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

allGroundShoes.indexOf('randomAllGroundShoes');

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

应该是:

allGroundShoes.indexOf(randomAllGroundShoes);

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

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

通过这种方式,您可以一步检索您的值并将其从数组中删除 - 无需额外查找。

jsfiddle.net/kRNTg

关于javascript - 在 for 循环中从数组中获取随机项,然后从数组中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13484322/

相关文章:

javascript - JavaScript 中未定义的函数

javascript - 在模态图片下方添加一个DIV框用于描述

c++ - 具有堆分配的大型数组的段错误

c - 关于数组去重的一个bug

c++ - 从 char 数组中选择随机字符?

javascript - 正则表达式忽略第一个 "less than"字符

javascript - 在javascript中访问未知对象的属性

javascript - ng-repeater打印结果0;当我运行该函数时

php - AJAX 登录表单重新加载页面

javascript - Knockout中绑定(bind)数据后获取数据