2010-08-25 19 views
6

मुझे पता है कि इस लेखन का एक और अधिक पठनीय तरीका है:ऐसा करने के लिए एक और अधिक पठनीय तरीका है?

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

संपादित करें:

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

मेरा खराब 8 डी संपादित – Hailwood

+0

केवल दिन (ओं) या सेकेंड लिखने के बारे में कैसे? कोई जावास्क्रिप्ट आवश्यक नहीं :) – 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 क्योंकि यह भाषा के लिए i18n के बारे में क्लीवर है जहां बहुवचन शब्द नहीं है उदाहरण के लिए –

+0

अच्छा !, कृपया भविष्य में "ट्रिपल" समकक्ष ऑपरेटर "===" का उपयोग करें। – gath

+0

@gath - धन्यवाद। मैंने '===' के बारे में सोचा, लेकिन उस मामले में मैं 'val> 1' के साथ क्या करूंगा? यह '('1', 'गाय', 'गायों') => असफल 'और' ('2', 'गाय', 'गाय') => काम करता है 'के बीच एक असंगतता पैदा करेगा। – Kobi

2

मैं कुछ इस तरह का प्रयोग करेंगे pluralize

+0

+1 मेरी तुलना में काफी बेहतर है। –

+0

एक ही समाधान की पेशकश करना चाहता था। एक और +1 – 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

कूल ... संपादित .. –

संबंधित मुद्दे

 संबंधित मुद्दे