javascript - 为什么在我的 JS 嵌套数组中得到 "arr[i] is undefined"?

标签 javascript arrays nested

我不明白为什么这不起作用。我知道问题来自条件 if(arr[i][j]===elem) 的第 8 行。

function filteredArray(arr, elem) {
  let newArr = [];

  for (let i = 0; i < arr.length; i++) {

    for(let j = 0; j < arr[i].length; j++) {

      if(arr[i][j]===elem) {

        newArr.push(arr.splice(i,1));

      }
    }
  }
  return newArr;
}

如果我在控制台中输入如下测试:

console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3));

我得到错误 arr[i] is undefined

最佳答案

您的问题是您正在修改循环内数组的长度。你的循环内部有 arr.splice(i,1);每次调用时,您的数组都会缩短 1。最终,您的数组变得太短,并且您试图越界读取一个项目。您可以通过在 if block 中注释掉该行来证明这一点;您的代码将无错误地运行。

我不确定您要在 newArr 中放入什么值,但是没有理由修改 arr 来获取您的值。只需从 arr 中读取你想要的值,然后将其推送到 newArr,你就没有问题了。


顺便说一句,与使用原生数组方法(如 arr.filter())相比,您是否有任何理由必须使用 for 循环? ?

关于javascript - 为什么在我的 JS 嵌套数组中得到 "arr[i] is undefined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53892176/

相关文章:

javascript - knockout 可观察数组的可观察数组

javascript - 从对象数组中获取 2 个值

javascript - 从数组中删除注释和空格而不丢失 0

Javascript递归函数不起作用

javascript - 是否可以将内嵌 javascript 代码插入到另一个 javascript/jquery 代码中?

javascript - Dropzone.js 可以用来上传音乐和视频文件吗?

javascript - 使用javascript启用提交按钮

arrays - 在Flutter中解析复杂的json时遇到问题

java - 将字节数组转换为字符串

html - 使用 XPath : how to exclude text in nested elements