【问题标题】:Iterating over an array with "holes" in JavaScript在 JavaScript 中迭代带有“洞”的数组
【发布时间】:2012-11-30 15:07:10
【问题描述】:

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

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

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

【问题讨论】:

  • for in 用于枚举对象属性。您应该使用标准的for 循环来迭代数组。欲了解更多信息,请参阅stackoverflow.com/questions/5263847/…
  • 如果您真的需要遍历稀疏数组,请使用for(i in array) { if(!isNaN(+i)) ... }。 (额外提示:您可能不需要遍历稀疏数组。这仅适用于您有一个具有 hugely 远距离索引的数组的情况,例如 510000000 是仅填充索引。)
  • 正确删除数组元素:stackoverflow.com/questions/500606/….

标签: javascript arrays foreach iteration


【解决方案1】:

如果你想在不留洞的情况下移除物品,你应该使用.splice()

myarray.splice(idx, 1);

但如果你说你想要那里的洞,但想跳过它们,那么你可以使用delete删除项目(留下一个洞) em>,并使用.forEach() 进行迭代,从而跳过漏洞。

delete myarray[idx];

// ...

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

要支持 IE8 及更低版本等旧版浏览器,您需要为 forEach() 添加兼容性补丁。

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

【讨论】:

  • 我可以使用拼接,但它是否内存不足?因为它处于无限循环中(我正在玩游戏)
  • @user1397271:它将从拼接点向前重新索引数组,因此需要一些处理。
猜你喜欢
  • 2021-07-31
  • 2018-05-14
  • 1970-01-01
  • 2015-03-14
  • 2020-09-07
  • 2011-07-07
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多