Код возвращает неопределенное значение вместо возвращаемого значения - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть строка 101000 или 1010100, в которой я пытаюсь рекурсивно заменить 100, используя функцию удаления данных.Функция removeata должна возвращать «да», если строка пуста, и «нет», если строка не пустая, и заменять ее значением 100.

Работает нормально для строки 1010100. Возвращает «нет», но не для строки101000, где он становится пустым.

console.log(removedata("1010100"));
console.log(removedata("101000"));

function removedata(data) {
  data = data.replace("100", "");
  if (data.length == 0) {
    return "yes";
  } else {
    if (data.indexOf("100") > -1 && data.length > 0) {
      removedata(data);
    } else {
      return "no";
    }
  }
}

когда 1010100 возвращает нет, но когда 101000 возвращает неопределенное

Ответы [ 2 ]

3 голосов
/ 21 апреля 2019

Вам необходимо return рекурсивный вызов:

console.log(removedata("1010100"));
console.log(removedata("101000"));

function removedata(data) {
  data = data.replace("100", "");
  if (data.length == 0) {
    return "yes";
  } else {
    if (data.indexOf("100") > -1 && data.length > 0) {
      return removedata(data);
    } else {
      return "no";
    }
  }
}

Теперь он возвращает yes для второго, потому что все 100 s удалены и строка пуста.

0 голосов
/ 21 апреля 2019
function removedata(data) {
  data = data.replace("100", "");
  if (data.length == 0) {
    return "yes";
  } else {
    if (data.indexOf("100") > -1 && data.length > 0) {
      removedata(data);                                     // This branch does not return anything
    } else {
      return "no";
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...