Почему я получаю «arr [i] is undefined» в моем вложенном массиве JS? - PullRequest
0 голосов
/ 22 декабря 2018

Я не могу понять, почему это не работает.Я знаю, что проблема возникает из 8-й строки в условии 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 голосов
/ 22 декабря 2018

Ваша проблема в том, что вы изменяете длину вашего массива внутри цикла.У вас есть arr.splice(i,1) внутри вашей петли;каждый раз, когда вызывается, ваш массив сокращается на 1.В конце концов, ваш массив становится слишком коротким, и вы пытаетесь прочитать элемент вне границ.Вы можете доказать это, закомментировав эту строку внутри блока if;Ваш код будет работать без ошибок.

Я не уверен, какие именно значения вы пытаетесь ввести в newArr, но нет причин изменять arr, чтобы получить ваши значения.Просто прочитайте значение, которое вы хотите от arr, и увеличьте его до newArr, и у вас не возникнет никаких проблем.


Кроме того, есть ли причина, по которой вам нужно использовать for циклы по сравнению с использованием собственных методов массива, таких как arr.filter()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...