2010-08-25 14 views
6

Sé que hay una manera más fácil de leer de escribir esto:una forma más legible de hacer esto?

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

¿Estás seguro de que deseas pluralizar minutos y segundos cuando son 1? – NullUserException

+0

my bad 8D corregido – Hailwood

+0

¿Qué le parece escribir día (s) o segundo (s)? No es necesario javascript :) – naikus

Respuesta

6

probar algo un poco más legible:

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

Uso como:

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

Usted puede incluso ir frutos secos y añadir esto a la prototype, y terminar con r.days.singleOrPlural('day', 'days'), pero no creo que se necesita aquí.

+0

+1 porque es cortante con respecto a i18n para el lenguaje donde el plural no es palabra + s como alemán, por ejemplo –

+0

¡agradable !, por favor use el operador de equivalencia "triple" "===" en el futuro. – gath

+0

@gath - Gracias. Pensé en '===', pero ¿qué haría con 'val> 1' en ese caso? Se crearía una inconsistencia entre '('1', 'cow', 'cow') => fail' y' ('2', 'cow', 'cow') => works'. – Kobi

2

me gustaría utilizar algo como esto:

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') 

EDITAR: Ahora se llama la función de pluralize

+0

+1 Mucho mejor que el mío. –

+0

Quería ofrecer la misma solución. Otro +1. – spbfox

+2

el nombre de la función no debe ser hourify, es un poco 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

Esto siempre agrega 's', y no agrega un espacio entre la unidad y el número. Además, es algo extraño que no agregue el número a su salida, tienes que hacerlo 'manualmente' ... – Kobi

+0

genial ... editado ... –

Cuestiones relacionadas