2009-10-15 15 views
6

मैं जावास्क्रिप्ट में 'कुछ' वर्ष से शुरू होने वाले वर्षों और वर्तमान वर्ष के साथ समाप्त होने वाले कई वर्षों के साथ एक गतिशील चयन बॉक्स बनाने की कोशिश कर रहा हूं। क्या जावास्क्रिप्ट में रूबी की range कक्षा जैसी कोई चीज है या क्या मुझे लूप का उपयोग करके वर्षों में लूप करना होगा?एक चुनिंदा बॉक्स के लिए जावास्क्रिप्ट में वर्षों की रेंज

यहां मैं क्या आया हूं, हालांकि मुझे लगता है कि यह रूबी में थोड़ा अधिक विचार कर रहा है, मैं केवल एक सीमा का उपयोग कर सकता हूं।

this.years = function(startYear){ 
     startYear = (typeof(startYear) == 'undefined') ? 1980 : startYear 
     var currentYear = new Date().getFullYear(); 
     var years = [] 
     for(var i=startYear;i<=currentYear;i++){ 
      years.push(i); 
     } 
     return years; 
    } 

उत्तर

17

जावास्क्रिप्ट में एक रेंज ऑब्जेक्ट है, लेकिन यह डीओएम के मनमाने ढंग से हिस्से को संदर्भित करता है और आईई 6/7 में समर्थित नहीं है।

यदि आप चाहते हैं, तो आप इस पर अपने कार्य को सरल बना सकते हैं, लेकिन यह वास्तव में वही है।

this.years = function(startYear) { 
      var currentYear = new Date().getFullYear(), years = []; 
      startYear = startYear || 1980; 

      while (startYear <= currentYear) { 
        years.push(startYear++); 
      } 

      return years; 
    } 
+0

बिल्कुल सही। मुझे एहसास नहीं हुआ कि आप || का उपयोग कर सकते हैं टाइपऑफ() के साथ गड़बड़ करने के बजाय ऑपरेटर। – rwilliams

+0

हां, लेकिन केवल तभी जब आप काम कर रहे हैं, तो झूठी/शून्य एक अमान्य मान है। डिफ़ॉल्ट पैरामीटर के लिए एक कार्य प्रदान करने के लिए यह एक बहुत ही आम तरीका है। –

1

दुर्भाग्य से, नहीं, वहाँ कोई "सीमा" है कि रूबी के लिए तुलनीय है जावास्क्रिप्ट में समारोह है, तो आप एक पाश के साथ यह करने के लिए होगा। ऐसा लगता है कि आप क्या कर रहे हैं काम करना चाहिए, हालांकि।

0

आप जावास्क्रिप्ट में एक सीमा विधि प्रदान कर सकते हैं, लेकिन आप इसे एक बहुत उपयोग करने के लिए अपने स्रोत कोड में शामिल किया के लिए भुगतान करने की आवश्यकता होगी।

var ए = Array.from (-5,5) >>> वापसी मूल्य: (ऐरे) -5, -4, -3, -2, -1,0,1,2,3,4 , 5

वर बी = Array.from (10,100,10) >> वापसी मान: (सरणी) 10,20,30,40,50,60,70,80,90,100

वर सी = Array.from ('ए', 'जेड') >> वापसी मूल्य: (ऐरे) ए, बी, सी, डी, ई, एफ, जी, एच, आई, जे, के, एल, एम, एन, ओ , पी, क्यू, आर, एस, टी, यू, वी, डब्ल्यू, एक्स, वाई, जे

Array.from= function(what, n, step){ 
    var A= []; 
    if(arguments.length){ 
     if(n){ 
      return A.range(what, n, step) 
     } 
     L= what.length; 
     if(L){ 
      while(L){ 
       A[--L]= what[L]; 
      } 
      return A; 
     } 
     if(what.hasOwnProperty){ 
      for(var p in what){ 
       if(what.hasOwnProperty(p)){ 
        A[A.length]= what[p]; 
       } 
      } 
      return A; 
     } 
    } 
    return A; 
} 

Array.prototype.range= function(what, n, step){ 
    this[this.length]= what; 
    if(what.split && n.split){ 
     what= what.charCodeAt(0); 
     n= n.charCodeAt(0); 
     while(what<n){ 
      this[this.length]= String.fromCharCode(++what); 
     } 
    } 
    else if(isFinite(what)){ 
     step= step || 1; 
     while(what <n) this[this.length]= what+= step; 
    } 
    return this; 
} 
संबंधित मुद्दे