Ruby范围的JavaScript等效代码

时间:2018-08-13 15:45:43

标签: javascript arrays

a = (2000..Date.today.year).to_a

在Ruby中,以上表达式返回[2000, 2001, ...snip..., 2018]

我想知道等效的JavaScript代码。

a = Array.from({length: new Date().getFullYear() - 2000 + 1}, (_, i) => i + 2000)

这可能是一个答案,但是我正在寻找更好的代码

  • 比上述代码更宽泛的浏览器支持,而不需要polyfill
  • 更严格的代码,例如将开始和结束指定为Ruby的代码(自从我写过两次2000以来,我的JS示例很丑)。

同时满足任一条件的代码会有所帮助。

编辑

我想在Vue.js的v-for循环中以内联方式使用值a

<option v-for="year in a" :value="year">FY{{year}}</option>

因此最好使用单个表达式。

1 个答案:

答案 0 :(得分:1)

最简单(但不是最短)的解决方案是使用循环:

a = []; 
for (var year = new Date().getFullYear(); year >= 2000; --year) 
    a.unshift(year);

>>>> [2000, 2001, ..., 2017, 2018]

或者也许定义一个函数:

function range(from, to) {
    var res = [];
    for (var i = from; i <= to; ++i) res.push(i);
    return res;
}

棘手的解决方案如下:

function range(from, to) { 
    return [...Array(to - from + 1).keys()].map(function(x){return x + from});
}

编辑:如果您确实有决心,则可以使所有内容成为表达式:

(function(a, b){return [...Array(b-a+1).keys()].map(function(x){return x+a;})})(2000, new Date().getFullYear())

:)