Правильное склонение слов в зависимости от числа всего в 11 строчек кода!
Обычный пример с выводом дней: 1 день
, 2 день
, 10 день
.
Пример, с использованием своей утилиты, которую напишем ниже: 1 день
, 2 дня
, 10 дней
и т.п.
Первое, что нужно сделать это создать файл declOfVal.js
, где-нибудь в src/utls/
.
Второе, это написать сам каркас функции для правильного склонения слов:
export function declOfNum(n, text_arr) {
n = Math.abs(n) % 100
var n1 = n % 10
if (n > 10 && n < 20) {
return text_arr[2]
}
if (n1 > 1 && n1 < 5) {
return text_arr[1]
}
if (n1 == 1) {
return text_arr[0]
}
return text_arr[2]
}
В этом же файле напишем вспомогательную функцию по типу:
export function declOfDay(num) {
return declOfNum(num, ['день', 'дня', 'дней'])
}
Функция declOfDay
будет вызывать declOfNum
с передачей массива из слов.
Там же можно написать функцию с минутами:
export function declOfMin(num) {
return declOfNum(num, ['минут', 'минута', 'минуты'])
}
Первое, что нужно сделать для использования функции склонения это вызвать нужный хелпер. В моем примере это выглядит так:
import { declOfDay } from '~/utils/declOfVal'
Далее, нужно передать число в момент вызова текущей функции.
Пример с реактом:
<RenderContent title={`${num} ${declOfDay(num)} подряд!`} />
На выходе это даст: 1 день подряд!
, 2 дня подряд!
, 10 дней подряд!
.
Если вам нравятся материалы на сайте, вы можете помочь. Средства пойдут на оплату сервера, на котором функционирует сайт, а также на продвижение ресурса и корм коту!