如果我宣布这个
var data = [];
data [300] = 1;
data [600] = 1;
data [783] = 1;
我有一个长度为784的数组,但其中只有3个已定义的项目。
由于splice(300,1)会删除项目和索引,但也会移动每个连续的位置,如何从数组中删除索引300中的对象而不改变数组的顺序,所以当我使用< / p>
for(var x in data)
它可以在索引600和783上正确迭代2次吗?
我尝试使用data[300] = undefined
,但索引300仍在迭代。
答案 0 :(得分:5)
答案 1 :(得分:4)
.length
属性减1。
但是,由于您并没有真正做到这一点并且考虑到存储数据的方式,因此您无法使用数组的任何有用功能。因此,您可以使用普通的Javascript对象来执行此操作:
var data = {};
data [300] = 1;
data [600] = 1;
data [783] = 1;
delete data[300];
这将创建一个具有三个属性的对象,然后删除其中一个属性。
然后,您可以迭代对象上的属性,如下所示:
for (var prop in data) {
console.log(data[prop]);
}
要记住的几件事:1)属性名称始终是字符串,因此您的数字会在上面的迭代中的prop
变量中显示为“600”。 2)使用for/in
技术进行迭代并不能保证迭代属性的任何顺序。它们可以以任何顺序出现,因为对象上的属性没有固有的顺序。
答案 2 :(得分:2)
你可以delete
数组中的那个元素:
delete data[300];
完整的例子:
var data = [];
data [300] = 1;
data [600] = 1;
data [783] = 1;
delete data[300];
var result = "";
for (var x in data) {
result += "<div>" + x + "</div>";
}
document.getElementById("output").innerHTML = result;
&#13;
<div id="output" />
&#13;