Способы работы со строками

171
29 декабря 2021, 06:00

Написать функцию, которая принимает двузначное число и возвращает его в текстовом виде.

Например: 35 – тридцать пять, 89 – восемьдесят девять, 12 – двенадцать.

Я сделал это так, но мне кажется, что есть решение и короче.

Потом я вспомнил про регулярные выражения, которые я никогда не учил. Хотел спросить, как, к примеру, эта задача решалась бы с помощью регулярных выражений?

function textNumber(number) { 
  let first = ['Один', 'Два', 'Три', 'Четыре', 'Пять', 'Шесть', 'Семь', 'Восемь', 'Девять']; 
  let second = ['Десять', 'Одинадцать', 'Двенадцать', 'Тринадцать', 'Четырнадцать', 'Пятнадцать', 'Шестнадцать', 'Семьнадцать', 'Восемьнадцать', 'Девяднадцать', 'Двадвать']; 
  let third = ['Двадцать', 'Тридцать', 'Сорок', 'Пятьдесят', 'Шестьдесят', 'Семьдесят', 'Восемьдесят', 'Девяносто']; 
  if (number > 0 && number <= 9) { 
    return first[number - 1]; 
  } 
  if (number >= 10 && number <= 20) { 
    return second[number - 10]; 
  } 
  if (number > 20 && number <= 99) { 
    let str = `${number}`; 
    str = str.split(''); 
    let firstNumber = str[0]; 
    let secondNumber = str[1]; 
    //return [ third[firstNumber - 2], first[secondNumber - 1] ]; 
    return `${third[firstNumber - 2]} ${first[secondNumber - 1]}`; 
  } 
} 
alert(textNumber(7)); 
alert(textNumber(20)); 
alert(textNumber(55));

Answer 1

Хотел спросить, как, к примеру, эта задача решалась бы с помощью регулярных выражений?

Регулярные выражения применяются для проверки соответствия строки шаблону, и/или для извлечения подстрок. То есть, они для обработки строковых входных данных.
А у данной задачи, входные данные - это числа, и суть заключается в их обработке... Так что, регулярки в этой задаче неприменимы (они могли бы применяться при обратном преобразовании: слов в числа).

мне кажется, что есть решение и короче

Код не сократился, зато символьный объем словарика меньше))

console.log(Array.from({ length: 100 },  
  (v, i) => i + ': ' + textNumber(i) 
).join('\n'));  
 
function textNumber(number) { 
  const dict = [ 
    ['ноль', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', '', 'две', '', 'четыр', 'пят', 'шест', 'сем', 'восем', 'девят'],  
    ['', '', 'двадцать', 'тридцать', 'сорок', '', '', '', '', 'девяносто'] 
  ];  
  if (number >= 0 && number <= 10) 
    return dict[0][number];  
  if (number > 10 && number <= 19) 
    return (dict[0][number] || dict[0][number - 10]) + 'надцать';  
  if (number >= 20 && number <= 99) { 
    const [units=0, tens] = [...('' + number)].reverse().map(Number);  
    return [ 
      tens ? dict[1][tens] || (dict[0][tens] + 'десят') : '',  
      units ? dict[0][units] : '' 
    ].join(' ');  
  } 
}

READ ALSO
можно ли дописать js

можно ли дописать js

Возможно ли сделать воспроизведение треков с разрешение json

190
Как убрать часть адреса из input?

Как убрать часть адреса из input?

Есть произвольных адрес в input1 (Россия, Московская область, Пушкино)

195
Условие авторизации в приложении на Flask

Условие авторизации в приложении на Flask

У меня есть функция по авторизации пользователя в моём приложении на Flask

199
Совет по готовому решению слайдера

Совет по готовому решению слайдера

Товарищи, верстаю макетДошел до части со слайдером

202