2010-08-25 21 views
6

So che c'è un modo più leggibile di scrivere questo:un modo più leggibile per farlo?

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

Sei sicuro di voler pluralizzare minuti e secondi quando sono 1? – NullUserException

+0

mio 8D difettoso modificato – Hailwood

+0

Che ne dici di scrivere solo giorno (s) o secondo (s)? Non è necessario javascript :) – naikus

risposta

6

provare qualcosa di un po ' più leggibile:

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

Uso come:

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

Si può anche andare noci e aggiungere questo al prototype, e finire con r.days.singleOrPlural('day', 'days'), ma non credo che ce n'è bisogno qui.

+0

+1 perché è una mannaia che riguarda i18n per la lingua in cui il plurale non è la parola + s come il tedesco ad esempio –

+0

nice !, si prega di utilizzare l'operatore di equivalenza "tripla" "===" in futuro. – gath

+0

@gath - Grazie. Ho pensato a '===', ma cosa avrei fatto con 'val> 1' in quel caso? Creerebbe un'incoerenza tra '('1', 'cow', 'cows') => fail' e' ('2', 'cow', 'cows') => works'. – Kobi

2

Vorrei usare qualcosa di simile:

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: rinominato la funzione di pluralize

+0

+1 Molto meglio del mio. –

+0

Volevo offrire la stessa soluzione. Un altro +1. – spbfox

+2

il nome della funzione non deve essere hertify, è un po 'confuso .. – 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

Questo aggiunge sempre 's', e non aggiunge uno spazio tra l'unità e il numero. Inoltre, è un po 'strano che non aggiunga il numero alla sua uscita, devi farlo' manualmente '... – Kobi

+0

cool ... modificato .. –

Problemi correlati