2010-08-25 2 views
6

Я знаю, что есть более читаемым способ написания этого:- более читаемый способ сделать это?

var string = ( 
    (r.d != 0 ? r.d + (r.d == 1 ? ' day' : ' days') : '') + 
    (r.h != 0 ? r.h + (r.h == 1 ? ' hour' : ' hours') : '') + 
    (r.m != 0 ? r.m + (r.m == 1 ? ' minute' : ' minutes') : '') + 
    (r.s != 0 ? r.s + (r.s == 1 ? ' second' : ' seconds') : '')); 
+0

Вы уверены, что хотите удвоить минуты и секунды, когда они равны 1? – NullUserException

+0

my bad 8D отредактировал – Hailwood

+0

Как насчет того, чтобы просто писать дни или секунды? Нет необходимости в javascript :) – naikus

ответ

6

попробовать что-то немного более читаемым:

function singleOrPlural(val, single, plural){ 
    if(val == 1) 
    return val + ' ' + single; 
    if(val > 1) 
    return val + ' ' + plural; 
    return ''; 
} 

Использование как:

singleOrPlural(r.day, 'day', 'days') 

Вы можете даже пойти орехи и добавить к prototype, и в конечном итоге с r.days.singleOrPlural('day', 'days'), но я не думаю, что здесь нужно.

+0

+1 потому что это cleaver относительно i18n для языка, где множественное число не является словом + s, как немецкий, например – 2010-08-25 05:45:41

+0

nice !, пожалуйста, используйте «тройной» оператор эквивалентности «===» в будущем. – gath

+0

@gath - Спасибо. Я думал о '===', но что бы я сделал с «val> 1» в этом случае? Это создало бы несогласованность между '('1', 'cow', 'cows') => fail' и' ('2', 'cow', 'cows') => works'. – Kobi

2

Я хотел бы использовать что-то вроде этого:

function pluralize(aVal, aSuffix) { 
    var r = ''; 

    if (aVal != 0) { 
     r = aVal + ' ' + aSuffix + (aVal > 1 ? 's' : ''); 
    } 

    return r; 
} 

var string = pluralize(r.d, 'day') + pluralize(r.h, 'hour') + 
    pluralize(r.m, 'minute') + pluralize(r.s, 'second') 

EDIT: переименована в функцию pluralize

+0

+1 Гораздо лучше, чем у меня. –

+0

Хочет предложить такое же решение. Еще один. – spbfox

+2

имя функции не должно быть часовым, это немного запутанно .. – Sairam

0
function getvalue(val, unit) 
{ 
     if(val>0) 
      return val + unit + (val > 1 ? 's' : ''); 
     else 
      return ''; 
} 

var string = gets(r.d, 'day') + gets(r.h, 'hour') + gets(r.m, 'minute') + gets(r.s, 'second'); 
+0

Это всегда добавляет 's' и не добавляет пробела между устройством и номером. Кроме того, это несколько странно, что он не добавляет номер к его выходу, вы должны сделать это «вручную» ... – Kobi

+0

cool ... отредактировал .. –

Смежные вопросы