用于选择框的JavaScript年份范围

rwi*_*ams 18 javascript arrays range

我正在尝试在JavaScript中创建一个动态选择框,其中包含从'some'年开始到当年结束的年份.在JavaScript中是否有类似Ruby的范围类,或者我必须使用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;
    }
Run Code Online (Sandbox Code Playgroud)

Jus*_*son 38

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));
Run Code Online (Sandbox Code Playgroud)


Wol*_*fyr 19

这将生成一个从当年开始到 50 年前结束的数组。

Array.from({ length: 51 }, (_, i) => new Date().getFullYear() - i);
Run Code Online (Sandbox Code Playgroud)

如果您想更改开始年份,只需调整

new Date().getFullYear()
Run Code Online (Sandbox Code Playgroud)

如果您想从头开始加而不是减,只需将“-”更改为“+”即可。


spr*_*rkc 8

如果您正在转换或不担心 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]
Run Code Online (Sandbox Code Playgroud)

打字稿

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


hun*_*n60 8

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

var years = Array.from(Array(new Date().getFullYear() - 1949), (_, i) => (i + 1950).toString())
console.log(years)
Run Code Online (Sandbox Code Playgroud)

这将创建从 1950 到当前年份的年份。该函数将在所有浏览器中运行


J. *_*rez 6

使用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]
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案在这里。 (2认同)

小智 6

使用 Date() 和 Array.from():

getCurrentYear = new Date().getFullYear(); // current year
listOfYears = Array.from({length: 11}, (_, i) => this.getCurrentYear - i);
console.log(listOfYears);
// Output: [2022, 2021, 2020, ...2012];
Run Code Online (Sandbox Code Playgroud)


小智 5

这将生成一个从当年开始到 10 年前结束的数组。

Array.from({ length: 10 }, (_, i) => new Date().getFullYear() - i);
// => [2022, 2021, 2020, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012]
Run Code Online (Sandbox Code Playgroud)