2010-08-25 28 views
6

Tôi biết có một cách dễ đọc hơn viết này:một cách dễ đọc hơn để làm điều này?

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

Bạn có chắc chắn muốn số nhiều phút và số giây khi chúng là 1 không? – NullUserException

+0

8D xấu của tôi đã chỉnh sửa – Hailwood

+0

Chỉ cần viết ngày hoặc giây? Không cần javascript :) – naikus

Trả lời

6

Hãy thử một cái gì đó một chút dễ đọc hơn:

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

Sử dụng như:

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

Bạn thậm chí có thể đi các loại hạt và thêm video này vào các prototype, và kết thúc với r.days.singleOrPlural('day', 'days'), nhưng tôi không nghĩ rằng nó là cần thiết ở đây.

+0

+1 bởi vì nó là cleaver liên quan đến i18n cho ngôn ngữ mà số nhiều không phải là từ + s như tiếng Đức ví dụ: –

+0

tốt đẹp !, hãy sử dụng toán tử "ba" tương đương "===" trong tương lai. – gath

+0

@gath - Cảm ơn. Tôi đã nghĩ về '===', nhưng tôi sẽ làm gì với 'val> 1' trong trường hợp đó? Nó sẽ tạo ra sự mâu thuẫn giữa '('1', 'bò', 'bò') => thất bại' và' ('2', 'bò', 'bò') => công trình'. – Kobi

2

Tôi sẽ sử dụng một cái gì đó như thế này:

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: đổi tên các chức năng để pluralize

+0

+1 Tốt hơn nhiều so với tôi. –

+0

Muốn cung cấp giải pháp tương tự. +1 khác. – spbfox

+2

tên của hàm không nên hourify, một chút khó hiểu của nó .. – 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

Điều này luôn thêm 's' và không thêm khoảng cách giữa đơn vị và số. Ngoài ra, nó là hơi lạ mà nó không thêm số vào đầu ra của nó, bạn phải làm điều đó 'bằng tay' ... – Kobi

+0

cool ... edited .. –

Các vấn đề liên quan