#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. Очень четкий комментарий, похоже, что это совершенно новое для меня… Спасибо!