RealAdmin.ru

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

JavaScript
Категория: Кодинг
09 марта 2017 г.

Для склонения числовых значений будем использовать небольшую javascript функцию. В качестве аргументов ей передаётся число и массив из форм слова при разных числовых значениях. Результат можно использовать по своему назначению.

    function num2str(n, text_forms) {  
        n = Math.abs(n) % 100; var n1 = n % 10;
        if (n > 10 && n < 20) { return text_forms[2]; }
        if (n1 > 1 && n1 < 5) { return text_forms[1]; }
        if (n1 == 1) { return text_forms[0]; }
        return text_forms[2];
    }

Применяется функция следующим образом:

    $('#p1').html('1 '+num2str(1, ['минута', 'минуты', 'минут']));
    $('#p2').html('2 '+num2str(2, ['минута', 'минуты', 'минут']));
    $('#p3').html('5 '+num2str(5, ['минута', 'минуты', 'минут']));

Результат:

Код последнего примера так же очень прост.

    $('#num').on('change',function(){
        val = num2str($(this).val(), ['год', 'года', 'лет']);
        $('#num-word').text(val);
    });

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

Теги:
Посмотрите похожее — 6
Комментарии —
  1. avatar Мишка 24 февраля 2019, 21:01 #
    Андрей, здравствуй. Помоги пожалуйста с построением кода. Как будет выглядеть готовый код для вставки? К примеру вариант с минутами...))
    1. avatar Simkin Andrew 24 февраля 2019, 22:14 #
      Добрый вечер. Так в статье есть пример, меняется только селектор, куда вставляется слово — у каждого он свой.
      1. avatar Мишка 25 февраля 2019, 16:18 #
        Вставил в таком порядке, но отображения нету :((

        Мне кажется я допустил ошибку…

        <script>
        $('#num').on('change',function(){
                val = num2str($(this).val(), ['год', 'года', 'лет']);
                $('#num-word').text(val);
            });
        
        function num2str(n, text_forms) {  
                n = Math.abs(n) % 100; var n1 = n % 10;
                if (n > 10 && n < 20) { return text_forms[2]; }
                if (n1 > 1 && n1 < 5) { return text_forms[1]; }
                if (n1 == 1) { return text_forms[0]; }
                return text_forms[2];
            }
        </script>
        
        
        1. avatar Simkin Andrew 25 февраля 2019, 16:25 #
          Убедись, что у тебя на сайте подключена библиотека jquery. И код попробуй поменять на этот:
          <script>
          $(function(){
          	function num2str(n, text_forms) {  
                  n = Math.abs(n) % 100; var n1 = n % 10;
                  if (n > 10 && n < 20) { return text_forms[2]; }
                  if (n1 > 1 && n1 < 5) { return text_forms[1]; }
                  if (n1 == 1) { return text_forms[0]; }
                  return text_forms[2];
              }
          
          	$('#num').on('change',function(){
                  val = num2str($(this).val(), ['год', 'года', 'лет']);
                  $('#num-word').text(val);
              });	
          });
          </script>
          jQuery можно подключить так:
          <script src="https://code.jquery.com/jquery-git.min.js"></script>
    © REALADMIN.RU   2019 г.
    Страница сгенерирована: 0,1570 s | 4 mb.
    На каком уровне Вы играете в шахматы?
    О П Р О С
    Home Question Top