2009-10-15 16 views
6

Estoy tratando de crear un cuadro de selección dinámica en JavaScript con un rango de años que comienza con 'algún' año y termina con el año actual. ¿Hay algo como la clase range de Ruby en JavaScript o tengo que recorrer los años usando un bucle for?Rango de años en JavaScript para un cuadro de selección

Esto es lo que he pensado, aunque creo que es un poco demasiado considerado en Ruby. Puedo usar un rango.

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; 
    } 

Respuesta

17

JavaScript tiene un objeto Range, pero se refiere a una parte arbitraria del DOM y no es compatible con IE 6/7.

Si lo desea, puede simplificar su función a esto, pero de todos modos es lo mismo.

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

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

      return years; 
    } 
+0

Perfecto. No me di cuenta de que podías usar el || operador en lugar de jugar con typeof(). – rwilliams

+0

Ya, pero solo si es falso/nulo es un valor no válido para lo que sea que esté trabajando. Este es un método muy común para proporcionar una solución alternativa para los parámetros predeterminados. –

1

Por desgracia, no, no hay ninguna función de "gama" en Javascript que es comparable a Ruby, por lo que tendrá que hacerlo con un bucle. Aunque parece que lo que estás haciendo debería funcionar.

0

le puede proporcionar un método gama en javascript, pero que tendría que utilizar una gran cantidad a pagar por su inclusión en el código fuente.

var A = Array.from (-5,5) >>> valor de retorno: (Array) -5, -4, -3, -2, -1,0,1,2,3,4 , 5

var B = Array.from (10,100,10) >> valor de retorno: (array) 10,20,30,40,50,60,70,80,90,100

var C = Array.from ('a', 'z') >> valor de retorno: (Array) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o , p, q, r, s, t, u, v, w, x, y, z

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; 
} 
Cuestiones relacionadas