1

我已经阅读了在 JavaScript 中删除数组元素 - 删除与拼接(除其他外)这有帮助,但我仍然不知道为什么下面的代码会以它的方式工作。

页面上有 10 个带有“名称”类的 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();

任何帮助表示赞赏。

4

1 回答 1

4

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

于 2013-08-02T20:46:01.437 回答