在 JavaScript 中迭代带有“洞”的数组

Ray*_*jax 3 javascript arrays iteration foreach

我有一个数组,其中一些项目将被删除;但有些循环仍在运行,所以我想简单地跳过删除对象的地方

我知道 for(i in array) 的语法应该执行此操作,因为它会迭代索引,但是我应该如何删除我的项目呢?因为当我执行 array[4] = null 时,我的 for 只是不关心并继续尝试使用 4 处的值。

我也尝试检查是否为 !null 但没有成功...谢谢

I H*_*azy 6

如果你想删除一个项目而不留下一个洞,你应该使用.splice()

myarray.splice(idx, 1);
Run Code Online (Sandbox Code Playgroud)

但如果你说你想要那里的洞,但想跳过它们,那么你可以使用delete删除该项目(留下一个洞),并.forEach()用于迭代,这会跳过洞。

delete myarray[idx];

// ...

myarray.forEach(function(item, i) {
    // holes will be skipped
});
Run Code Online (Sandbox Code Playgroud)

要支持 IE8 及更低版本等旧版浏览器,您需要添加forEach().

  • MDN .forEach() (忽略较短的补丁。这是一个糟糕的不兼容版本。)