Суть проблемы следующая, есть скрипт (я знаю что сам скрипт кривой, запутанный и прочее, я новичок в изучении JS, и решал задачку сам как мог):
function NumPerString(numb) {
let units = ['Один','Два','Три','Четыре','Пять','Шесть','Семь','Восемь','Девять','Десять', 'Одинадцать', 'Двенадцать', 'Тринадцать',
'Четырнадцать', 'Пятнадцать', 'Шестнадцать', 'Семьнадцать', 'Восемнадцать', 'Девятнадцать'],
dozenOf = ['Двадцать', 'Тридцать', 'Сорок', 'Пятьдесят', 'Шестьдесят', 'Семдесят', 'Восемдесят', 'Девяносто'],
hundreds = ['Сто', 'Двести', 'Триста', 'Четыреста', 'Пятьсот', 'Шестьсот', 'Семьсот', 'Восемьсот', 'Девятьсот'],
thousands = ['Тысяча', 'Тысячи', 'Тысяч'],
millions = ['Миллион', 'Милиона', 'Миллионов'],
numerator = ['Одна', 'Две'];
if (numb < 0 || numb > 999999999) {
return 'Не коректное число!<br>';
} else if (numb == '' || isNaN(numb) || numb == 0) {
return 'Ноль';
} else if (numb > 0 && numb < 20 ) {
return units[numb-1];
} else if (numb > 19 && numb < 100) {
if (numb % 10 === 0) {
return dozenOf[Math.floor((numb / 10) - 2)];
} else if (numb % 10 != 0) {
return dozenOf[Math.floor((numb / 10) - 2)] + ' ' + units[(numb%10) - 1];
}
} else if (numb > 99 && numb < 1000) {
if (numb % 100 === 0) {
return hundreds[Math.floor((numb / 100) - 1)];
} else if (numb % 100 != 0) {
if (numb%100 > 0 && numb%100 < 20 ) {
return hundreds[Math.floor((numb / 100) - 1)] + ' ' + units[Math.floor(numb%100-1)];
} else if (numb%100 > 19 && (numb%100)%10===0) {
return hundreds[Math.floor((numb / 100) - 1)] + ' ' + dozenOf[Math.floor((numb%100)/10 - 2)];
} else if (numb%100 > 20 && (numb%100) % 10 != 0) {
return hundreds[Math.floor((numb / 100) - 1)] + ' ' + dozenOf[Math.floor((numb%100)/10 - 2)] + ' ' + units[Math.floor(((numb%100)%10)-1)];
}
}
} else if (numb === 1000) {
return numerator[numb/1000-1]+ ' ' + thousands[numb/1000-1];
} else if (numb > 1000 && numb < 2000) {
if (numb%1000 > 0 && numb%1000 < 20) {
return numerator[Math.floor(numb/1000-1)]+ ' ' + thousands[Math.floor(numb/1000-1)]+ ' ' +units[Math.floor(numb%1000-1)];
} else if (numb%1000 > 19 && (numb%100)%10===0) {
return numerator[Math.floor(numb/1000-1)]+ ' ' + thousands[Math.floor(numb/1000-1)]+ ' ' +dozenOf[Math.floor((numb%1000)/10 - 2)];
} else if (numb%1000 > 99 && (numb%1000)%100===0) {
return numerator[Math.floor(numb/1000-1)]+ ' ' + thousands[Math.floor(numb/1000-1)]+ ' ' + hundreds[Math.floor(((numb%1000)/100)-1)];
} else if (numb%1000 > 20 && (numb%1000) % 10 != 0) {
return numerator[Math.floor(numb/1000-1)]+ ' ' + thousands[Math.floor(numb/1000-1)]+ ' ' + dozenOf[Math.floor((numb%1000)/10 - 2)] + ' ' + units[Math.floor(((numb%1000)%10)-1)];
} else if ((numb%1000) > 100 && (numb%1000) < 120) {
return numerator[Math.floor(numb/1000-1)]+ ' ' + thousands[Math.floor(numb/1000-1)]+ ' ' +hundreds[Math.floor(numb%1000/100-1)]+ ' ' +units[Math.floor((numb%1000)%100-1)];
}
}
}
console.log(NumPerString(1100));
Проблема заключается в том, что в строках 41 и 45 вызов к элементу массива hundreds не работает, и выдает undefined. Сама формула, проверена в консоли и точно выдает 0, что должно по идеи выводить нулевой элемент массива. И даже при замене самой формулы, на hundreds[0], все равно выдает undefined.
Кто знает в чем именно ошибка, и как её исправить и избежать, подскажите пожалуйста новичку.
P.S. Большая просьба, с ответами типа скрипт плохой, ссылками или примерами более продвинутых скриптов, не писать, мне интересна именно в чем причина ошибки, и если можно человеческим языком, и как её решить, если она вообще решаема.
Заранее большое спасибо за ответы.