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. Мишка24 февраля 2019, 21:01#
    Андрей, здравствуй. Помоги пожалуйста с построением кода. Как будет выглядеть готовый код для вставки? К примеру вариант с минутами...))
    1. Simkin Andrew24 февраля 2019, 22:14#
      Добрый вечер. Так в статье есть пример, меняется только селектор, куда вставляется слово — у каждого он свой.
      1. Мишка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. Simkin Andrew25 февраля 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,1999 s | 12 mb.
    На каком уровне Вы играете в шахматы?
    О П Р О С
    Home Question Top