Created
January 20, 2017 12:03
-
-
Save YozhEzhi/9ae6c83841e74f4710c3372f93400d35 to your computer and use it in GitHub Desktop.
Склонение числительных в js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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); // Коментариев |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks, just fork myself 👍