javascript - Math.random 和 splice 随机删除数组元素

标签 javascript

我读过 Deleting array elements in JavaScript - delete vs splice (除其他外)这有帮助,但我仍然不知道为什么下面的代码会以它的方式工作。

页面上有 10 个类为“names”的 div。所有当前的不透明度均为 1(包含在上下文中)。

我试图随机选择其中的 5 个,并将它们的背景颜色更改为“红色”。使用 splice() 后,我希望数组的大小减少 1,但这并没有发生。

在此处查看实例:http://jsfiddle.net/RussellEveleigh/Fr85B/1/

var z = document.getElementById("selected");

var r = function () {
b = document.getElementsByClassName("names");
c = [];
d = [];

    for (i = 0; i < b.length; i++) {
        if (window.getComputedStyle(b[i]).opacity == 1) {
            c.push(b[i]);
            }
        }

    for (i = 0; i < 5; i++) {
        num = Math.floor(Math.random() * c.length);
        z.innerHTML += c.length; // would expect "109876"
        d.push(c[num]);
        c.splice(num, num);

        }

    for (i = 0; i < d.length; i++) {
        d[i].style.backgroundColor = "red";
        }
    };

r();

感谢任何帮助。

最佳答案

您应该使用 c.splice(num, 1);,因为您希望一次从数组中删除一个元素,而不是 num 个元素。 This updated fiddle记录每次删除后的长度,并始终输出 9,8,7,6,5

关于javascript - Math.random 和 splice 随机删除数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18025754/

相关文章:

Javascript:尝试从循环中删除选项

javascript - 数组作为使用javascript的mongoose模式中的值

javascript - 将服务器端存储的 javascript 文件添加到 html (node.js)

javascript - 将数据从 HTTPS 页面发送到本地主机服务器

javascript - 如何停止 webdriver 而不导致 Node js 崩溃

javascript - 在悬停时,工具提示显示图像?

javascript - 显示/隐藏 div (ASP.NET MVC)

javascript - 制作/查找 html5 验证程序书签

javascript - 用PHP连接MySQL却通过JS查询MySQL?

javascript - 根据路线滚动到 init 上的给定位置