Может ли кто-нибудь объяснить, почему я получаю эту ошибку в Javascript? [Не удается прочитать свойство ‘length’ of undefined]

Вот мой код:

function isEven(num) {;
  if (num % 2 === 0) {
  return true;}
  else {
  return false;}
  }

function convertToIntegers(lst) {
  lst.split(' ');
  var len = lst.length;
  var count = 0;
  while (count < len) {
      lst[count] = parseInt(lst[count]);
      count++}
      }




function iqTest(numbers){

  var int_list = convertToIntegers(numbers);
  var e_list = [];
  var o_list = [];
  var count = 0;
  var len_int = int_list.length;
  while (count < len_int) {
      if (isEven(int_list[count]) === true) {
      e_list.push(count);}
      else if (isEven(count) === false) {
      o_list.push(count);}
      count++}
  if (e_list.length < 2 && e_list.length > 0 && o_list.length > 2) {
      return e_list[0];}
  else if (o_list.length < 2 && o_list.length > 0 && e_list.length > 2) {
      return o_list[0];}
      }

Каждый раз, когда я запускаю его, я получаю эту ошибку, которая говорит «TypeError: не может прочитать свойство ‘length’ undefined at iqTest». Может ли кто-нибудь объяснить мне, как я могу исправить эту ошибку. Я не понимаю, почему любой объект будет неопределенным в моем коде. Каждое объявление var, которое я делаю, является полным. I thought undefined only come up if I write something like’ var a ‘ without definiting it.

3 ответа

  1. это очень легко!
    в этих ситуациях вы хотите проследить значение назад.

    1. вы используете .lengthin iqTest()In The line var len_int = int_list.length;

    2. последнее назначение int_list— это строка at var int_list = convertToIntegers(numbers);

    3. glimps at convertToIntegers(numbers)не показывает returnоператора.

    поэтому вывод:
    convert2Integers()не возвращает ничего в int_list
    тогда вы пользуетесьint_list.length; undefined

    кажется, вы хотите вернуться lstиз convert2Integers()

    function convertToIntegers(lst) {
      lst = lst.split(' '); // NOTICE CHANGE, + create a different list!
      var len = lst.length;
      var count = 0;
      while (count < len) {
        lst[count] = parseInt(lst[count]);
        count++
      }
      return lst; //THIS LINE was Missing!
    }
    
  2. Томер У и Патрик Эванс правы. изменение функции помощника

    function convertToIntegers(lst) {
      lst = lst.split(' ');
      var len = lst.length;
      var count = 0;
      while (count < len) {
        lst[count] = parseInt(lst[count]);
        count++;
      }
      return lst;
    }
    

    таким образом, вы сохраняете результат разбиения, а затем возвращаете массив по завершении.

    при этом эта функция не нужна. Проверьте встроенную карту функций массива

  3. Чтобы развернуть комментарий @Patrick Evans, необходимо сохранить результат разделения, а затем использовать его для цикла while. Так же, как Примечание, Вы знаете количество итераций цикла, поэтому вы можете использовать цикл for.

    function convertToIntegers(lst) {
    //lst.split(' ');
    var lst_array = lst.split(' ');
    var len = lst_array .length;
    var count = 0;
    while (count < len) {
      lst_array[count] = parseInt(lst_array[count]);
      count++}
      }
    //
    //for loop code
    //
    //for(i=0;i<lst_array.length;i++){
    //  lst_arry[i] = parseInt(lst_array[i]);
    //}