Склонение окончаний в словах при числах

Узнайте как сделать склонение окончаний при помощи Javascript. Возьмите готовую функцию решающую задачу со склонениями и посмотрите варианты её применения.

склонение окончаний

  Когда числовые значения выводятся програмно, мы не можем предугадать склонение окончаний слов связанных с этими числами.

  В качестве примера можно привести цену или курс рубля: 101 рубль, 252 рубля, 1000 рублей. Или ещё пример - пользователей онлайн или зарегестрировано на сайте: 21 пользователь, 43 пользователя, 30 пользователей.

 


Функция JS для склонения окончаний

  Продемонстрировать работу js-функции определяющей правильное склоение, я могу в следующем демо-примере. В поле ввода вводите любое число и для него будет определенено правильное окончание для связанного слова:

яблоко
штука
рубль

 

Функция выполняющая склонение в данном случае реализована на JavaScript и выглядит она так:

function sklonenie(number, txt) {
    var cases = [2, 0, 1, 1, 1, 2];
    return txt[(number % 100 > 4 && number % 100 < 20) ? 2 : cases[(number % 10 < 5) ? number % 10 : 5]];
}

Функция принимает два параметра:

  1. number - это число для которого нужно выполнить склонение окончания у существительного
  2. txt - массив строк с выриантами склонений: ['вариант1', 'вариант2', 'вариант3'].

  Функция возвращает строку, которая является подходящим вариантом склонения (из массива txt) для переданного ей числа (параметр number).


Параметр txt

В вариант1 попадают слова с окончаниями для:

1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131, 141 и т.д.

В вариант2:

2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44 ... 102, 103, 104, 122, 123, 124, 132 и т.д.

В вариант3:

5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, 27, 28, 29, 30, 35 и т.д.


  Эту же функцию можно записать в стиле синтаксиса ES-6. Получится стрелочная функция в одну строку:

const sklonenie = (number, txt, cases = [2, 0, 1, 1, 1, 2]) => txt[(number % 100 > 4 && number % 100 < 20) ? 2 : cases[(number % 10 < 5) ? number % 10 : 5]];

Вызов функции

  Ниже примеры вызова в функции:

let apple = 1;
let pieces = 3;
let ruble = 10;

let a = sklonenie(apple, ['яблоко', 'яблока', 'яблок']); // яблоко
let b = 'Мне нужно ' + pieces + ' ' + sklonenie(pieces, ['штука', 'штуки', 'штук']); // Мне нужно 3 штуки
let c = `Мы потратили ${ruble} ${sklonenie(ruble, ['рубль', 'рубля', 'рублей'])}`; // Мы потратили 10 рублей

 

  Конечно вместо вариантов слов можно в параметр txt передавать массив с вариантами окончаний. Давайте покажу такой пример с окончаниями для слова рубль, заодно будут ещё примеры с использованием данной функции:

let r = 'рубл';
let v = ['ь', 'я', 'ей'];
let n = 224;

let str1 = 'У меня 120 ' + r + sklonenie(120, v);                   // У меня 120 рублей
let str2 = 'Цена: ' + n + ' рубл' + sklonenie(n, ['ь', 'я', 'ей']); // Цена: 224 рубля
let str3 = `На счету ${n} рубл${sklonenie(n, v)}`;                  // На счету 224 рубля

  Я надеюсь вам помогло данное решение и вы теперь сможете реализовать задачу со склонением слов при числах.

  Ну а если у вас остались вопросы - оставляйте их в комментариях.

 

 

 

Комментарии 0

*** чтобы писать комментарии.