JS продолжает сообщать, что метод «toString» не определен

#javascript #tostring

#javascript #tostring

Вопрос:

Моя цель — расположить заданную строку в алфавитном порядке. Например, заданная строка «Святая Библия» должна получить «BbeehHilloTy». Ниже приведен код:

 function alphabetized(s) {
  let sArray = s.split(" ").join("").split("");
  //below to perform a bubble sorting
  for (let i = 0; i < sArray.length; i  ) {
    for (let j = 0; j < sArray.length - i; j  ) {
      if ((sArray[j].toString().toLowerCase()) > (sArray[j   1].toString().toLowerCase())) {
        let tempItem = sArray[j];
        sArray[j] = sArray[j   1];
        sArray[j   1] = tempItem;
      }
    }
  }
  return sArray.join("");
}

console.log(alphabetized('The Holy Bible'));
  

Я продолжал получать ошибку из консоли JS:

 if ((sArray[j].toString().toLowerCase()) > (sArray[j   1].toString().toLowerCase())) {
TypeError: Cannot read property 'toString' of undefined
  

Любая помощь была бы оценена!

Комментарии:

1. Внимательно прочитайте сообщение. Это не «toString не определено», это «toString из неопределенных».

2. Когда i есть 0 , то sArray.length - i будет таким же, как sArray.length , поэтому sArray[j 1] будет за пределами.

Ответ №1:

вот в чем проблема. переменная не определена, метод toString не может быть вызван. поэтому вам просто нужно добавить этот код. если вы ничего не хотите делать

 if(!sArray[j   1]) continue;
  

это небольшой совет. отладка — хороший инструмент для кодирования. попробуйте!

Комментарии:

1. Спасибо! Перед вызовом метода toString() я должен был оценить существование значения, которое будет вызывать этот метод.

Ответ №2:

Проблема не в том, что toString не определено. Это то, что вы пытаетесь вызвать toString() что-то, что не определено.

Поскольку вы вызываете toString() по результатам оценки массива, представляется вероятным, что элемент массива, на который вы ссылаетесь, недействителен. Вы делаете это в двух местах: sArray[j] и sArray[j 1 ] . Поскольку вы перебираете j от 0 до длины массива, вы можете вычислить единицу за пределами длины массива.

В рамках отладки попробуйте записать как значение j , так и то, каким, по вашему мнению, должен быть символ, который вы оцениваете.

Комментарии:

1. Очень четкий комментарий, похоже, что это совершенно новое для меня… Спасибо!