从javascript数组中删除索引altogehter

时间:2015-02-04 22:01:07

标签: javascript arrays

如果我宣布这个

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仍在迭代。

3 个答案:

答案 0 :(得分:5)

您可以使用delete

delete data[300];

这将索引的值设置为undefined,但不会修改元素索引本身。

详细了解删除操作符here

答案 1 :(得分:4)

如果您打算使用数组,那么dsg的答案肯定会有用。但是,如果你的数据会像它一样稀疏,我想知道一个普通的Javascript对象是否可能是你不希望索引/键改变的稀疏数据的更好选择。数组针对从索引为0开始的连续数据序列进行优化,并用于迭代一系列值。并且,它们跟踪使用的最高索引的.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];

完整的例子:

&#13;
&#13;
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;
&#13;
&#13;