JavaScript中遍历包含“空洞”的数组

3
我有一个数组,其中一些项将被删除;但某些循环仍在运行,因此我想简单地跳过删除对象的位置。
我知道for(i in array)语法应该可以做到这一点,因为它遍历索引,但是如何删除我的项目呢?因为当我执行array[4] = null时,我的循环就不再管它,并继续尝试使用第4个值。
我还尝试过检查!null,但没有成功...
谢谢。

for in循环用于枚举对象属性。在迭代数组时,应使用标准的for循环。更多信息请参见https://dev59.com/qm435IYBdhLWcg3wtCWQ。 - Matt
1
如果你真的需要迭代稀疏数组,请使用for(i in array) { if(!isNaN(+i)) ... }。(贴士:你可能不需要迭代稀疏数组。这只适用于指数巨大、例如 510000000 是唯一填充索引的情况。) - apsillers
正确删除数组元素:https://dev59.com/UXRB5IYBdhLWcg3wz6ed。 - Felix Kling
1个回答

6
如果您想在不留下空洞的情况下删除一项内容,您应该使用.splice()
myarray.splice(idx, 1);

但是如果您说您想要保留空洞,但又想跳过它们,则可以使用delete移除该项(保留空洞),并使用.forEach()进行迭代,以跳过空洞。

delete myarray[idx];

// ...

myarray.forEach(function(item, i) {
    // holes will be skipped
});

为支持IE8及以下版本的旧浏览器,你需要添加一个兼容性补丁来支持forEach()方法。

  • MDN .forEach() (请忽略较短的补丁。它是一个不合规的版本。)

我可以使用splice,但它会占用很多内存吗?因为它在一个无限循环中(我正在做一个游戏)。 - Rayjax
它将重新索引从剪切点向前的数组,因此需要一些处理。 - I Hate Lazy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接