javascript - 为什么我可以遍历数组而不是遍历-Javascript

标签 javascript arrays for-loop

有人可以解释为什么这行不通吗:

function filterNumbers(arr) {

  for (var i = 0; i < arr.length; i++) {
    if(typeof arr[i] !== 'number') {
      arr.splice(i, 1);
    }
  }
}


但这确实是:

function filterNumbers(arr) {

  for (var i = arr.length - 1; i >= 0; i--) {
    if (typeof arr[i] !== 'number') {
      arr.splice(i, 1);
    }
  }
}


对我来说,功能似乎是相同的,我无法理解。

我正在测试的输入数组是:

var arr = [1, 'a', 'b', 2];

最佳答案

每个人都没有直接回答您的问题,而是继续指长度。

您的代码:

function filterNumbers(arr) {

     for (var i = 0; i < arr.length; i++) {
         if(typeof arr[i] !== 'number') {
            arr.splice(i, 1);
         }
     }
}


问题在于i所引用的内容(它在长度方面确实起着作用,但它们没有进一步解释)。当i为1时,您引用的是数组的a。然后,将其从数组中拼接出来,该数组现在有1个引用“ b”。在完成迭代之前,它仍然在for循环内。然后,将i从1(现在正在引用b)增加到2,然后在数组中引用2

您可以通过使数组为所有字母来进一步测试,然后您将看到如何跳过其他所有字母(['a', 'b', 'c', 'd', 'e', 'f']将导致['b', 'd', 'f'])。

要解决该问题,您必须根据循环内的操作来增加/减少i。如果进行拼接,请在循环中递减i或抛出else语句,并在else语句内而不是每次迭代后增加i值。

关于javascript - 为什么我可以遍历数组而不是遍历-Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52004456/

相关文章:

javascript - 使用 Javascript 创建表

javascript - 在 NodeJS 中从 html 调用 TypeScript 编译的代码

javascript - 水平 AJAX 发布加载程序,检测滚动条何时到达末尾

javascript - 返回 JavaScript 数组中具有最低值的对象

Javascript - 按日期然后按时间对对象数组进行排序

java - 在 Java 中需要一些有关数组构造函数和比较数组结果的帮助

javascript - for循环每5次迭代递增变量?

javascript - 所有语句都没有在 for ...in 循环中执行

arrays - 符合以下条件的 N 长序列对

java - 在java中获取排序数组的原始索引(Android)