javascript - 删除元素时循环遍历数组

标签 javascript arrays loops

我想知道迭代长度在循环内变化的数组的可靠和/或标准方法是否以及什么是。我问是因为每次我想做的时候我都会选择不同的方法来做这件事,例如

for ( var i = 0; i < myarray.length; i++ ) {
  if (myarray[i] === 'something') {
    myarray.splice(i, 1);

    // *to avoid jumping over an element whose index was just shifted back to the current i
    i--;
  }
}

var i = 0;
while (myarray[i]) {
  if (myarray[i] === 'something') {
    myarray.splice(i, 1);
  } else {
    i++;
  }
}

这些是我发现自己这样做的方式,但我很好奇是否有标准方法。

最佳答案

我发现在另一个方向上迭代更简单:

for (var i=myarray.length; i--; ) {
   if (myarray[i] === 'something') myarray.splice(i, 1);
}

这样您就不必在删除时更改增量。

许多开发人员,尤其是那些在 JavaScript 之前没有接触过类 C 语言的开发人员,发现处理递减运算符的微妙之处时感到困惑。我写的循环也可以写成

for (var i=myarray.length-1; i>=0; i--) {

关于javascript - 删除元素时循环遍历数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17319511/

相关文章:

javascript - 整页水平 javascript Accordion

javascript - 如何从快速后端服务器获取图像并将其显示到 React js 前端?

php - 尝试 php 重新加载页面

javascript - 阅读javascript源代码

c - 程序传递 if 语句并需要指向对象类型的指针

php - 通过链接导航多个对象而不重复

java - 如何才能最好地优化循环超过十亿次的循环?

java.lang.ArrayIndexOutOfBoundsException : length=4; index=4 length array 异常

javascript - 比较两个对象数组,如果不存在则推送

javascript - 比较和过滤两个数组