Порядковые числа в JavaScript: добавление суффиксов st, nd, rd и th к числу

Порядковые числа в JavaScript: добавление суффиксов st, nd, rd и th к числу

7 ноября 2022 г.

В Javascript обычно считается лучшей практикой работать с абсолютными числами, поскольку number — это определенный тип. Однако при выражении этих чисел в пользовательских интерфейсах более вероятно, что мы захотим выразить их по-другому. Например, предположим, что у меня есть следующий список чисел. Я хочу сохранить их как числа, но затем добавить nd, st, rd или th при отображении их пользователю:

let x = [ 1, 13, 22, 100, 1204, 133 ];

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

К счастью, в Javascript есть решение — использование Intl.PluralRules. Это определит множественное число

правила, основанные на локали:

let plurals = Intl.PluralRules();
let x = plurals.select(0) // Returns "other"
let y = plurals.select(1) // Returns "one"
let z = plurals.select(2) // Returns "other"

По умолчанию PluralRules настроен как cardinal, что означает, что все, что больше 1, считается множественным числом. Выше, как вы можете видеть, PluralRules позволяет нам различать, является ли число множественным или нет.

Все становится интереснее, когда мы устанавливаем для него значение ordinal, которое учитывает то, как мы используем числа. Здесь он сообщит нам правила для конкретного языка о том, как обрабатывать каждое число, чтобы мы могли делать такие вещи, как 2nd, 3rd и 4th< /p>

const plurals = new Intl.PluralRules('en-US', { type: 'ordinal' });
let a = plurals.select(0); // Returns "other"
let b = plurals.select(1); // Returns "one"
let c = plurals.select(2); // Returns "two"
let d = plurals.select(3); // Returns "few"
let e = plurals.select(4); // Returns "other"

Теперь мы можем настраивать наши выходные данные в зависимости от локали, чтобы не сталкиваться со странными проблемами. Здесь мы используем en-US, но любая другая допустимая локаль также будет работать. Чтобы сопоставить наши числа с 1-м, 2-м, 3-м и т. д., нам нужно только создать такое сопоставление:

let x = [ 1, 13, 22, 100, 1204, 133 ];

const plurals = new Intl.PluralRules('en-US', { type: 'ordinal' });

let pluralMapping = {
    "one" : "st",
    "two" : "nd",
    "few" : "rd",
    "other" : "th"
}

let y = [];
x.forEach((item) => {
    let getPlural = plurals.select(item);
    let pluralEnding = pluralMapping[getPlural]
    y.push(`${item}${pluralEnding}`)
})

console.log(y); // ['1st', '13th', '22nd', '100th', '1204th', '133rd']

Также опубликовано здесь


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE