Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 12.04.2013, 01:28
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

function wordend(num, words){
    return words[ ((num=Math.abs(num%100)) > 10 && num < 15 || (num%=10) > 4 || num === 0) + (num !== 1) ];
}
alert(11+' '+wordend(11, ['стул','стула','стульев']));

Ещё чуток сократил, хотя это, конечно, просто баловство.)
__________________
29375, 35
Ответить с цитированием
  #12 (permalink)  
Старый 12.04.2013, 17:51
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от qwerty-клавиатура
 
Регистрация: 12.04.2013
Сообщений: 132

http://x9a.ru/склонение-слов-и-количество/

Последний раз редактировалось qwerty-клавиатура, 12.04.2013 в 19:32.
Ответить с цитированием
  #13 (permalink)  
Старый 12.04.2013, 19:13
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

qwerty-клавиатура, да, что-то в этом есть:
function wordend(num, words){
    if((num=Math.abs(num%100)) > 20) num%=10;
    return words[ (num > 4 || num === 0) + (num !== 1) ];
}

можно дальше развлекаться))
__________________
29375, 35
Ответить с цитированием
  #14 (permalink)  
Старый 12.04.2013, 19:34
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от qwerty-клавиатура
 
Регистрация: 12.04.2013
Сообщений: 132

зачем abs? хотя -1 градус, -2 градусов. Не все таки оно не нужно
Ответить с цитированием
  #15 (permalink)  
Старый 12.04.2013, 21:13
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от qwerty-клавиатура
 
Регистрация: 12.04.2013
Сообщений: 132

это плохая функция во-первых у слов месть одинаковая основа, меняются только окончания, а во-вторых я тоже умею однострочники писать

function pluralize(count, base, singular, plural1, plural2) { 
    return count + ' ' + base + ( ( count = (count %= 100) > 20 ? count % 10 : count ) == 0 || count > 4 ? plural2 : count > 1 ? plural1 : singular ); 
}
Ответить с цитированием
  #16 (permalink)  
Старый 12.04.2013, 21:13
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от qwerty-клавиатура
 
Регистрация: 12.04.2013
Сообщений: 132

for (var i = 0; i < 1000; ++i) console.log( pluralize(i, 'бутыл', 'ка', 'ки', 'ок') )
Ответить с цитированием
  #17 (permalink)  
Старый 12.04.2013, 21:38
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

Если уж так хочется писать не целые слова, а куски, пожалуйсто:
num + 'бутыл' + wordend(num, ['ка', 'ки', 'ок'])

При этом в отличие от того, что предлагаете, вы между цифрой и текстом может быть любой разделитель, а не только пробел.

Но это мелочи, интересно другое:
1. Чем плохая? (по сути они одинаковы же)
2. Интерес не в длинном однострочнике, а в максимальном сокращении лишних телодвижений.)

Сообщение от qwerty-клавиатура Посмотреть сообщение
зачем abs? хотя -1 градус, -2 градусов. Не все таки оно не нужно
function wordend(num, words){
    if((num=Math.abs(num%100)) > 20) num%=10;
    return words[ (num > 4 || num === 0) + (num !== 1) ];
}
function pluralize(count, base, singular, plural1, plural2) {
    base = count + ' ' + base;
    count = (count %= 100) > 20 ? count % 10 : count;
    return base + (count == 0 || count > 4 ? plural2 : count > 1 ? plural1 : singular);
}

alert([
    'wordend: -2 градус' + wordend(-2, ['', 'a', 'ов']),
    '\npluralize: ' + pluralize(-2, 'градус', '', 'а', 'ов')
]);

И почему же не нужно? Сейчас не нужно, а потом получив глюк отвлекаться от работы и вспоминать, что в функции нет проверки на знак?
__________________
29375, 35

Последний раз редактировалось Aetae, 12.04.2013 в 21:54.
Ответить с цитированием
  #18 (permalink)  
Старый 12.04.2013, 23:05
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от qwerty-клавиатура
 
Регистрация: 12.04.2013
Сообщений: 132

ну -1, -2, -3 это применимо только к температуре, всем понятна такая запись -2°C, количество не может быть отрицательным(труп либо есть, либо его нет). Пример таймера использовать http://x9a.ru/samples/timer.htm
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
смена class (стиль) блока при прокрутке стриницы CrossFire Элементы интерфейса 7 26.07.2015 21:24
смена картинок при нажатии sdff Общие вопросы Javascript 15 08.02.2014 17:08
Смена картинок при наведении utb jQuery 0 06.04.2012 08:58
Смена картинки в шапке при перезагрузки wcb-falcon Элементы интерфейса 12 13.07.2010 23:36
Смена картинки (бекграунд дива ) при событии (нажатие клавиш или клавиши и мыши) Monster Events/DOM/Window 5 01.11.2009 01:16