Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.04.2013, 20:41
Профессор
Отправить личное сообщение для qwermjk Посмотреть профиль Найти все сообщения от qwermjk
 
Регистрация: 31.01.2010
Сообщений: 229

Смена окончания при подсчёте
Может кому нибудь из читающих форум, будет интересен скриптик!!
При подсчёте чегонибудь, допустим, яблок ... мы меняем окончание когда произносим: 1 яблоко, 2 яблока, 5 яблок ...
function wordend(number, word, end1, end2, end3){
	if(Number(String(number).length) > 2) number = Number(String(number).substr(-2));
	if(number == 11 || number == 12 || number == 13 || number == 14){
		return word+end3;
	} else {
		switch(Number(String(number).substr(-1))){
			case 1: return word+end1; break;
			case 2:case 3:case 4: return word+end2; break;
			case 5:case 6:case 7:case 8:case 9:case 0: return word+end3; break;
		}
	}
}

alert(111+' '+wordend(111, 'став', 'ка', 'ки', 'ок'));
alert(1+' '+wordend(1, 'яблок', 'о', 'а', ''));
alert(5+' '+wordend(5, 'секунд', 'а', 'ы', ''));
Ответить с цитированием
  #2 (permalink)  
Старый 01.04.2013, 20:46
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от qwermjk
Может кому нибудь из читающих форум, будет интересен скриптик!!
При подсчёте чегонибудь, допустим, яблок ... мы меняем окончание когда произносим: 1 яблоко, 2 яблока, 5 яблок ...
а со стульями то не работает
Ответить с цитированием
  #3 (permalink)  
Старый 01.04.2013, 21:01
Профессор
Отправить личное сообщение для qwermjk Посмотреть профиль Найти все сообщения от qwermjk
 
Регистрация: 31.01.2010
Сообщений: 229

Сообщение от dmitriymar
а со стульями то не работает
alert(1+' '+wordend(1, 'стул', '', 'а', 'ьев'));

Меняем везде цифру 1, на любое другое число! И всё работать будет ... Просто надо правильно корень слова взять ...
в функции wordend, первый параметр, это количество (времени, предметов и тд), второй параметр - неизменная часть слова, которая будет во всех трёх случаев ... 1 СТУЛ, 2 СТУЛа, 5 СТУЛьев - а из этого вы уже догодались откуда берутся 3,4,5 параметры ...

Последний раз редактировалось qwermjk, 01.04.2013 в 21:04.
Ответить с цитированием
  #4 (permalink)  
Старый 02.04.2013, 00:25
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

function pluralForm ( n, forms ) {
    return forms[(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2) ];
}
//pluralForm( 1, ["стул", "стула", "стульев"] );
Ответить с цитированием
  #5 (permalink)  
Старый 02.04.2013, 01:40
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

У каждого свой костыль
function num(n, one, two, five) {
    if ((n = Math.abs(n) % 100) > 4 && n < 21 || (n %= 10) > 4 || n === 0 ) return five;
    if (n > 1) return two;
    return one;
}
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 02.04.2013, 10:21
Профессор
Отправить личное сообщение для qwermjk Посмотреть профиль Найти все сообщения от qwermjk
 
Регистрация: 31.01.2010
Сообщений: 229

Мда!! оказывается у меня самый тупой метод =)) Ладно, переделаем ...
Ответить с цитированием
  #7 (permalink)  
Старый 02.04.2013, 10:43
Профессор
Отправить личное сообщение для qwermjk Посмотреть профиль Найти все сообщения от qwermjk
 
Регистрация: 31.01.2010
Сообщений: 229

Вот, вторая попытка!!!
function wordend(num, words){
	return words[((num%100 > 10 && num%100 < 15) || num%10 > 4 || num%10 == 0)? 2 : (num%10 == 1)? 0 : 1];	
}

alert(11+' '+wordend(11, ['стул','стула','стульев']));
Ответить с цитированием
  #8 (permalink)  
Старый 02.04.2013, 13:56
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

qwermjk, очевидная оптимизация:
function wordend(num, words){
    return words[ ((num=Math.abs(num%100)) > 10 && num < 15 || (num%=10) > 4 || num === 0) ? 2 : num === 1 ? 0 : 1 ];
}
Но тут ещё есть куда оптимизировать(напр. последний пункт).)

P.S. Math.abs - модуль - нужен чтобы работало и с отрецательными числами.
__________________
29375, 35
Ответить с цитированием
  #9 (permalink)  
Старый 02.04.2013, 14:47
Профессор
Отправить личное сообщение для qwermjk Посмотреть профиль Найти все сообщения от qwermjk
 
Регистрация: 31.01.2010
Сообщений: 229

Сообщение от Aetae
P.S. Math.abs - модуль - нужен чтобы работало и с отрецательными числами.
По идеи он вообще не нужен!!! просто в функцию загоняем положительное число, а где вывести нужно, там отрицательное!!
Так как с отрицательными числами врядли будет использоваться эта функция!! например так:
alert(-11+' '+wordend(11, ['стул','стула','стульев']));
Ответить с цитированием
  #10 (permalink)  
Старый 03.04.2013, 09:58
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

Хехех, по идее - наоборот первой проверкой должна стоять проверка "а число ли нам вообще передают", далее должна идти проверка не дробное ли...)
__________________
29375, 35
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
смена 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