В цикле выдает Undefined JS
Код:
const reverse = (str) => {
let result = '';
for (let i = str.length; i >= 0; i--) {
result = result + str[i];
}
return result;
};
console.log(reverse('Hello')); // 'undefinedolleH'
Не понимаю причину, по которой переменная result принимает значение underfined с самого начала
Ответы (2 шт):
Автор решения: HTO HOT
→ Ссылка
Дело в том, что изначально i в цикле for не соответствует индексу последнего символа в строке и даже выходит за предел строки.
Тоже самое что:
let str = 'Hi'
console.log(str[2]+' '+'world')
Для того чтобы исправить такую ошибку, код let i = str.length замените на let i = str.length-1
Автор решения: Alexander
→ Ссылка
Причина: неверно заданные значения для цикла.
Ваша строка:
[H, e, l, l, o] // (Строка)
[0, 1, 2, 3, 4] // (индексы)
Свойство length содержит КОЛИЧЕСТВО символов в строке, а не ИНДЕКС последнего.
КОЛИЧЕСТВО начинают отсчёт с 1, а ИНДЕКСЫ с 0.
Поэтому вы получаете вот такую работу кода в цикле:
// str.length === 5
result = result + str[5]; // undefined
result = result + str[4]; // o
result = result + str[3]; // l
result = result + str[2]; // l
result = result + str[1]; // e
result = result + str[0]; // H
Решение:
Стартуйте цикл с i равным последнему ИНДЕКСУ, а не длине строки.
Замечания по коду:
Я бы предпочёл использовать оператор "Сложение с присваиванием" Вместо:
result = result + str[i]
Вот так:
result += str[i]
Ссылки на материал:
P. S.
- Никогда не вставляйте код в картинках, это усложняет его анализ и, тем более, копирование.
- Интересно (и вполне ожидаемо), что этот метод переворота строки работает от 60 до 90% быстрее более распространённого метода:
const reverse = (str) =>
str
.split('')
.reverse()
.join('');