Skip to content

Instantly share code, notes, and snippets.

@YozhEzhi
Created January 20, 2017 12:03
Show Gist options
  • Save YozhEzhi/9ae6c83841e74f4710c3372f93400d35 to your computer and use it in GitHub Desktop.
Save YozhEzhi/9ae6c83841e74f4710c3372f93400d35 to your computer and use it in GitHub Desktop.
Склонение числительных в js
// Author @realmyst
function declOfNum(number, titles) {
cases = [2, 0, 1, 1, 1, 2];
return titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ];
}
// use
declOfNum(count, ['найдена', 'найдено', 'найдены']);
// Author @retyui
// Currying (каррирование)
function declOfNum(titles){
number = Math.abs(number);
var cases = [2, 0, 1, 1, 1, 2];
return function(number){
return titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ];
}
}
// use:
declOfNum(['Яблоко','Яблока','Яблок'])(2); // Яблока
var apples = declOfNum(['Яблоко','Яблока','Яблок']);
apples(0) // Яблок
apples(1) // Яблоко
apples(2) // Яблока
// Auto Currying (автоматическое каррирование)
var declOfNum = (function(){
var cases = [2, 0, 1, 1, 1, 2];
var declOfNumSubFunction = function(titles, number){
number = Math.abs(number);
return titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ];
}
return function(_titles) {
if ( arguments.length === 1 ){
return function(_number){
return declOfNumSubFunction(_titles, _number)
}
}else{
return declOfNumSubFunction.apply(null,arguments)
}
}
})()
// use:
declOfNum(['Яблоко','Яблока','Яблок'], 0); // Яблок
declOfNum(['Яблоко','Яблока','Яблок'], 1); // Яблоко
declOfNum(['Яблоко','Яблока','Яблок'], 2); // Яблока
var count_comments = declOfNum(['Коментарий', 'Коментария', 'Комантариев']);
count_comments(0); // Коментариев
count_comments(1); // Коментарий
count_comments(2); // Коментария
count_comments(69); // Коментариев
@UrbanNuke
Copy link

Thanks, just fork myself 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment