-
Star
(329)
You must be signed in to star a gist -
Fork
(73)
You must be signed in to fork a gist
-
-
Save realmyst/1262561 to your computer and use it in GitHub Desktop.
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, ['найдена', 'найдено', 'найдены']); |
Спасибо огромное!
@zxqfox Спасибо! ;)
Очень кратко и полезно.
Спасибо!
🔥
@zxqfox большое спасибо за наводку!
Чую автор взял код отсюда http://internetbrains.blogspot.com/2010/01/javascript.html
@pauldasslier чую не взял, а спиздил 😃
@pauldasslier @lloydbanks тихо спздл и ушел, называется нашел. Ни признать, ни опровергнуть - не могу, это было 8 лет назад лол. Я и не знал, что тут активность какая-то, гитхаб не смог в нотификации :)
Спасибо!
Спасибо!
Спасибо!
Спасибо!!!
Спасибо!!!
Нашел статью по теме с еще одним вариантом реализации этой задачи https://sitedev.ru/correct-word-close-to-number/
Для определения правильной формы существительного рядом с числом (счетная форма) сам использую вариант автора, но адаптированный под дробные (не целые) числа:
CountForm = (number, titles) => {
number = Math.abs(number);
if (Number.isInteger(number)) {
cases = [2, 0, 1, 1, 1, 2];
return titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ];
}
return titles[1];
}
Использование:
CountForm(count, ['рубль', 'рубля', 'рублей']);
Спасибо!
Спасибо!!!
export function countFormat(
number: number,
one: string,
two: string,
five: string
): string {
let absNumber = Math.abs(number);
absNumber %= 100;
if (number >= 5 && number <= 20) return five;
absNumber %= 10;
if (absNumber === 1) return one;
if (absNumber >= 2 && absNumber <= 4) return two;
return five;
}
function declOfNum(count, one, two, few) {
return [few, one, two, two, two, few][count % 100 > 10 && count % 100 < 20 ? 0 : Math.min(count % 10, 5)]
}
JSDoc + Using new ES features + can return number with declined string
/**
* Declines depending on the number
* @param {number} number
* @param {string[]} titles Strings for decline
* @param {boolean} [full=false] If true - returns number + string
* @return {string}
*/
export function declOfNum (number, titles, full = false) {
const cases = [2, 0, 1, 1, 1, 2]
const result = titles[(number % 100 > 4 && number % 100 < 20) ? 2 : cases[(number % 10 < 5) ? number % 10 : 5]]
return full ? `${number} ${result}` : result
}
https://www.npmjs.com/package/numeralize-ru#numeralizepluralizecount-one-two-five