为什么我的JS嵌套数组中出现“ arr [i]未定义”?

时间:2018-12-22 00:33:43

标签: javascript arrays nested

我不知道为什么这不起作用。我知道问题出在条件if(arr[i][j]===elem)的第八行。

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

1 个答案:

答案 0 :(得分:4)

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

我不确定您要在newArr中输入什么值,但是没有理由修改arr以获取您的值。只需从arr中读取所需的值,然后将其推入newArr,就不会有任何问题。


顺便说一句,与使用arr.filter()之类的本机数组方法相比,您是否有任何理由需要使用for循环?