• 03-01-2022 07:01
  • 137
  • 0

Склонение слов в зависимости от числа

Правильное склонение слов в зависимости от числа всего в 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 дней подряд!.

Пост опубликовал:
user img
Евгений
Автор канала jackcoder на ютубе!