Проблема с склонениями

Не могу разобраться, в чем причина. Имеется код:

var count = document.getElementById('count').innerHTML;
console.log('my count', count);
function declination(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] ];
}
title = declination(count, [' штук', ' штуки']);
var summ = count + title;
document.getElementById('count').innerHTML = summ;

В count получаю число (допустим, сейчас 13). Выводит 13 и undefined, где ошибка?


Ответы (1 шт):

Автор решения: Tiarait

Сам массив cases = [2, 0, 1, 1, 1, 2], в нем присутствует 2, но в массиве titles всего 2 элемента (индексы 0 и 1). Так же и с условием (number%100>4 && number%100<20)? 2

Вам нужно добавить еще 1 элемент вот так declination(count, [' штукa', ' штуки', ' штук'])

Вот рабочий код взят отсюда

var count = 13;
console.log('my count', count);
function declination(arg, titles) {
  let cases = [2, 0, 1, 1, 1, 2];
  return titles[(arg % 100 > 4 && arg % 100 < 20) ? 2 : cases[Math.min(arg % 10, 5)]];
}
title = declination(count, [' штукa', ' штуки', ' штук']);
var summ = count + title;
console.log('summ', summ);

→ Ссылка