Здравствуйте. Подскажите, пожалуйста, почему такой код выдает ошибку:
Uncaught TypeError: Cannot read property 'indexOf' of undefined at script.js:21
var input = 'javascript is awesome';
var output = input.split('');
for(var i = 0; i <= output.length; i++) {
if(output[i].indexOf('a') != -1) {
output[i] = '4';
} else if (output[i].indexOf('e') != -1) {
output[i] = '3';
} else if (output[i].indexOf('o') != -1) {
output[i] = '0';
}
}
output.join('');
alert(output);
Нужно не так:
i <= output.length;
а так:
i < output.length;
Потому что отсчет ведется с нуля и в итоге получается вы выходите за границы массива на 1 символ.
(var i = 0; i <= output.length; i++)
- тут проблема, а именно в <=
. Вы от первого элемента 0, до элемента output.length. Так как отсчет начинатся с 0, то элемента с индексом output.length не существует. Используйте <
var input = 'javascript is awesome';
var output = input.split('');
for(var i = 0; i < output.length; i++) {
if(output[i].indexOf('a') != -1) {
output[i] = '4';
} else if (output[i].indexOf('e') != -1) {
output[i] = '3';
} else if (output[i].indexOf('o') != -1) {
output[i] = '0';
}
}
output.join('');
alert(output);
Кроме неверного условия цикла(что уже было указано в соседних ответах), в вашем коде есть еще, как минимум одна проблема:
output.join('');
не меняет значение переменной output
(как вам почему то кажется), а возвращает новое значение-строку.
По-хорошему, вместо вашего "страшненького" цикла, можно использовать одну единственную функцию Array.prototype.map
:
var input = 'javascript is awesome';
var output = input.split('').map(function (char) {
switch (char) {
case 'a':
return 4;
case 'e':
return 3;
case 'o':
return 0;
default:
return char;
}
}).join('');
alert(output);
А вот и рабочий пример на JSFiddle.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Никак не могу додумать как по повторному клику по блоку возвращать все это дело в исходное состояние
ЗдравствуйтеМожет кто-нибудь подскажет как построить график, ибо строиться некорректно