Склонение окончаний в словах при числах
Когда числовые значения выводятся програмно, мы не можем предугадать склонение окончаний слов связанных с этими числами.
В качестве примера можно привести цену или курс рубля: 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]];
}
Функция принимает два параметра:
-
number
- это число для которого нужно выполнить склонение окончания у существительного -
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 рубля
Я надеюсь вам помогло данное решение и вы теперь сможете реализовать задачу со склонением слов при числах.
Ну а если у вас остались вопросы - оставляйте их в комментариях.
*** Войдите чтобы писать комментарии.