Vlad024
@Vlad024

Как сделать формирование слова на основе числа?

Добрый день!

Допустим есть массив чисел [1,2,3...10,11...21]
Как сделать чтобы на выходе функция выдавала текстовый вариант
  • - Первая
  • - Вторая
  • - Третья
  • ...
  • - Десятая
  • - Одинадцатая
  • ...
  • - Двадцать первая


Можно было бы создать массив с текстовыми вариантами и по индексу (из массива чисел) находить нужный. Но кол-во динамическое. Поэтому такой способ не подходит.
Подскажите пожалуйста куда копать?
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
v3shin
@v3shin
Веб-шаман
Я бы написал так:
Код для чисел от 0 до 199
function n2text(n) {
    const texts = {
        0: 'нулевая',
        1: 'первая',
        2: 'вторая',
        3: 'третья',
        4: 'четвертая',
        5: 'пятая',
        6: 'шестая',
        7: 'седьмая',
        8: 'восьмая',
        9: 'девятая',
        10: 'десятая',
        11: 'одиннадцатая',
        12: 'двенадцатая',
        13: 'тринадцатая',
        14: 'четырнадцатая',
        15: 'пятнадцатая',
        16: 'шестнадцатая',
        17: 'семнадцатая',
        18: 'восемнадцатая',
        19: 'девятнадцатая',
        20: 'двадцатая',
        30: 'тридцатая',
        40: 'сороковая',
        50: 'пятидесятая',
        60: 'шестидесятая',
        70: 'семидесятая',
        80: 'восьмидесятая',
        90: 'девяностая',
        100: 'сотая',
    };
    const texts0 = {
        20: 'двадцать',
        30: 'тридцать',
        40: 'сорок',
        50: 'пятьдесят',
        60: 'шестьдесят',
        70: 'семьдесят',
        80: 'восемьдесят',
        90: 'девяносто',
        100: 'сто',
    };
    
    if (n > 200) {
        return '';
    }
    
    let str = [];
    if (n > 100) {
        str.push(texts0[100]);
        n = n % 100;
    }
    if (n === 100) {
        return texts[100];
    }
    
    if (n < 20 && n > 0) {
        str.push(texts[n]);
    } else {
        if (n % 10 === 0) {
            str.push(texts[n]);
        } else {
            str.push(texts0[Math.floor(n / 10) * 10]);
            str.push(texts[n % 10]);
        }
    }
    
    str = str.join(' ');
    return str[0].toUpperCase() + str.substr(1);
}


Проверка:
spoiler
for (let i = 0; i < 20; ++i) {
    let n = Math.floor(Math.random() * 199);
    console.log(n, n2text(n));
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы