0x0013 Word ending depends of number. Окончание слова в зависимости от числа

Часто бывают ситуации, когда в зависимости от числа необходимо менять склонение. Например, один из самых распространённых вариантов – корзина. Вместо "1 товаров", "7 товаров", "22 товаров" многие, особо не заморачиваясь, делают простейший вариант: "Товаров: <количество>".

Этот вариант простой, но не самый красивый. Особенно когда предпочтительней выводить что-то типа "В корзине 7 товаров на сумму 11950 руб.".

Решение проблемы довольно тривиально:


function numDecl(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
        ]
    ];  
}

Функция используется как для окончаний ('товар' + numDecl(22, ['', 'а', 'ов'])), так и для слов полностью (numDecl(22, ['элемент', 'элемента', 'элементов'])).