我已经阅读了Deleting array elements in JavaScript - delete vs splice(以及其他内容)已经有所帮助,但我仍然不知道为什么下面的代码会以它的方式工作。
页面上有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();
任何帮助表示感谢。
答案 0 :(得分:4)
您应该使用c.splice(num, 1);
,因为您希望一次从数组中删除一个元素,而不是num
个元素。 This updated fiddle会在每次删除后记录长度,并始终输出9,8,7,6,5
。