用于选择框的JavaScript年份范围

时间:2009-10-15 21:41:29

标签: javascript arrays range

我正在尝试在JavaScript中创建一个动态选择框,其中包含从'some'年开始到当年结束的年份。在JavaScript中是否有类似Ruby的range类,或者我必须使用for循环来循环多年?

这是我想出来的,虽然我觉得在Ruby中有点考虑我可以使用一个范围。

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

8 个答案:

答案 0 :(得分:33)

JavaScript确实有一个Range对象,但它引用了DOM的任意部分,IE 6/7不支持。

如果你愿意,你可以简化你的功能,但实际上它们都是一样的。

this.years = function(startYear) {
    var currentYear = new Date().getFullYear(), years = [];
    startYear = startYear || 1980;  
    while ( startYear <= currentYear ) {
        years.push(startYear++);
    }   
    return years;
}
 
console.log( this.years(2019-20));

答案 1 :(得分:1)

不幸的是,不,Javascript中没有“范围”功能可以与Ruby相媲美,所以你必须用循环来做。看起来你正在做的事应该起作用。

答案 2 :(得分:1)

您可以在javascript中提供范围方法,但是您需要大量使用它来支付它在源代码中的包含。

var A= Array.from(-5,5)&gt;&gt;&gt;返回值:

  

(阵列)-5,-4,-3,-2,-1,0,1,2,3,4,5

var B= Array.from(10,100,10)&gt;&gt;&gt;返回值:

  

(阵列)10,20,30,40,50,60,70,80,90,100

var C= Array.from('a','z')&gt;&gt;&gt;返回值:

  

(阵列)的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;
}

答案 3 :(得分:1)

如果您正在转译或不担心IE用户,请使用Array.fill()

const now = new Date().getUTCFullYear();    
const years = Array(now - (now - 20)).fill('').map((v, idx) => now - idx);

// (20) [2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000]

TypeScript

get years() {
  const now = new Date().getUTCFullYear();
  return Array(now - (now - 20)).fill('').map((v, idx) => now - idx) as Array<number>;
}

答案 4 :(得分:1)

虽然上述答案完美无缺,但我只会为 lodash 添加一个答案 用户。

<块引用>

_.range([start=0], end, [step=1])

<块引用>

创建一个数字数组(正数和/或负数),从开始到结束,但不包括结束。

我将 1 添加到 max,因为 lodash 不包括 end 范围。

这将创建一个从 60 年前到现在的年份数组。

如果您想要相反的顺序,可以使用 _.rangeRight

const max = new Date().getUTCFullYear();
const min = max - 60;
const yearRange = _.range(min, max + 1);

console.log(yearRange);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

答案 5 :(得分:0)

使用Array.from

const currentYear = (new Date()).getFullYear();
const range = (start, stop, step) => Array.from({ length: (stop - start) / step + 1}, (_, i) => start + (i * step));
console.log(range(currentYear, currentYear - 50, -1)); 
// [2019, 2018, 2017, 2016, ..., 1969]

答案 6 :(得分:0)

@Override
public String toString() {
    return "MyClass{" +
            "a='" + a + '\'' +
            ", b='" + b + '\'' +
            ", c='" + c + '\'' +
            ", d='" + d + '\'' +
            '}';
}

答案 7 :(得分:0)

如果要查找一行答案,则可以在一行中使用Array.from创建年份列表。

Array.from(Array(new Date().getFullYear() - 1949), (_, i) => (i + 1950).toString())

这将创建从1950年到当前年的年份。此功能将在所有浏览器中运行