Функция склонения слов

Когда-то я публиковал статью о том, как склонять слова в зависимости от стоящих перед ними чисел на PHP. Теперь посмотрим, как это можно сделать на JavaScript.

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

Пример использования функции:

var count = 31;
var result = $count+wordForm($count, [' комментарий', ' комментария', ' комментариев']);

Кстати говоря, по этому принципу можно переписать и нашу старую функцию склонения слов на PHP. Вот что получим:

<?php
function wordForm($num, $word) {
	$cases = array (2, 0, 1, 1, 1, 2);  
	return $word[ ($num%100 > 4 && $num %100 < 20) ? 2 : $cases[min($num%10, 5)] ];  
}
?>

И пример:

<?php
$count=31;
echo $count.' '.wordForm($count, array('комментарий', 'комментария', 'комментариев'));  
?>

Смотрите также

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

  • Петр5 марта 2014 в 13:03 #

    Помогите пожалуйста разобраться.

    Есть вот такой скрипт, как доработать чтобы склоняло (раз, раза)

  • Петр5 марта 2014 в 14:03 #
    var caution = false
    function setCookie(name, value, expires, path, domain, secure) {
        var curCookie = name + "=" + escape(value) +
            ((expires) ? "; expires=" + expires.toGMTString() : "") +
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") +
            ((secure) ? "; secure" : "")
        if (!caution || (name + "=" + escape(value)).length <= 4000)
            document.cookie = curCookie
        else
            if (confirm("Cookie exceeds 4KB and will be cut!"))
                document.cookie = curCookie
     }
     
    function getCookie(name) {
        var prefix = name + "="
        var cookieStartIndex = document.cookie.indexOf(prefix)
        if (cookieStartIndex == -1)
            return null
        var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length)
        if (cookieEndIndex == -1)
            cookieEndIndex = document.cookie.length
        return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex))
     }
     
     function deleteCookie(name, path, domain) {
        if (getCookie(name)) {
            document.cookie = name + "=" +
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT"
        }
     }
     
    function fixDate(date) {
        var base = new Date(0)
        var skew = base.getTime()
        if (skew > 0)
            date.setTime(date.getTime() - skew)
     }
     
     var now = new Date()
     fixDate(now)
     now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000)
     var visits = getCookie("counter")
     if (!visits)
        visits = 1
     else
        visits = parseInt(visits) + 1
     setCookie("counter", visits, now)
    document.write('<span> Вы посетили эту страницу <b>' + visits + '</b> раз(а).</span>')
  • Петр5 марта 2014 в 14:03 #

    Вроде получилось отправить код.

  • Alex10 января 2016 в 21:01 #

    Приветствую.. Помогите добавить склонение к этому коду..
    /Выводит число подписчиков (У вас же на сайте и прочитал)

    jQuery(function($){
    	$.ajax({  
    		url: 'http://api.vk.com/method/groups.getById?gid=27541941&fields=members_count',  
    		dataType: "jsonp",  
    		success:function(e){ 
    			$('#vkontakte_count').html(e.response[0].members_count) 
    		}  
    	}); 
    });
    • Миша12 января 2016 в 06:01 #

      Привет, попробуйте это:

      $('#vkontakte_count').html( wordForm(e.response[0].members_count, [' подписчик', ' подписчика', ' подписчиков']) );

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Комментарии закрыты.