В Node / Javascript, как я могу сопоставить количество элементов из строки в int? - PullRequest
0 голосов
/ 04 октября 2018

Например, у меня есть пользовательский ввод любой строки: «1-й», «2-й», «третий», «четвертый», «пятый», «9999-й» и т. Д. Это только примеры, пользователь может ввести любую строку.

Я хочу сопоставить это целочисленной мощности:

"1st" -> 0
"2nd" -> 1
"third" -> 2
"fourth" -> 3
"fifth" -> 4
"9999th" -> 9998

Поэтому мне нужна какая-то функция, где:

   function mapCardinality(input: string): number{
     let numberResult:number = ??
     return numberREesult;
   }

, и я могу назвать ее так:

console.log(
  mapCardinality("1st"), // print 0
  mapCardinality("2nd"), // print 1
  mapCardinality("third"), // print 2
  mapCardinality("fourth"), // print 3
  mapCardinality("fifth"), // print 4
  mapCardinality("9999th") // print 9998
);

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Сначала я бы спросил, каковы суффиксы для всех входов?

  • 'nd', 'rd', 'st', 'th' (большинство чисел)

Если они введут целое число с указанными выше префиксами, вы можете написатьследующая функция:

const getInteger = input => input.slice(0, -2);
const num = getInteger('999th');
console.log(num); // prints "999"

Если они входят в удлиненный вариант, это становится намного сложнее, особенно когда речь идет об опечатках, недостатке пробелов и т. д. Одним из способов может быть сопоставление однозначных слов ('один »,« два »и т. д.), десятки (« десять »,« двадцать »и т. д.), сотни, тысячи и т. д. вместо каждого мыслимого числа.Затем я бы проанализировал и нашел подходящие слова, чтобы получить результат.Это, как говорится, по-прежнему ограничивает.Я настоятельно рекомендую ограничить пользовательские форматы ввода.Почему пользователь не может ввести целое число?

const cardinalDictionary = {
  'zero': 0,
  'one': 1,
  ...,
  'twenty',
  ...,
  'hundred': 100,
  'thousand': 1000,
};
0 голосов
/ 04 октября 2018

Просто найдите его в массиве или проанализируйте как число:

const mapCardinality = c => {
   const pos = ["1st", "2nd", "third", "fourth",  "fifth"].indexOf(c);
   return pos === -1 ? parseInt(c, 10) - 1 : pos;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...