Диапазон лет в JavaScript для выбора окна

Я пытаюсь создать динамический блок выбора в JavaScript с целым рядом лет, начиная с "некоторого" года и заканчивая текущим годом. Есть ли что-то вроде Ruby range класс в JavaScript или мне нужно цикл через годы, используя цикл 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;
    }

Ответ 1

У 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));

Ответ 2

К сожалению, нет, в Javascript нет функции "диапазона", которая сопоставима с Ruby's, поэтому вам придется делать это с помощью цикла. Похоже, что то, что вы делаете, должно работать.

Ответ 3

Вы можете предоставить метод диапазона в javascript, но вам придется много использовать его, чтобы заплатить за его включение в ваш исходный код.

var A= Array.from(-5,5) >>> возвращаемое значение:

(Массив) -5, - 4, -3, - 2, -1, 0,1,2,3,4,5

var B= Array.from(10,100,10) >>> возвращаемое значение:

(Массив) 10,20,30,40,50,60,70,80,90,100

var C= Array.from('a','z') >>> возвращаемое значение:

(Массив) а, б, в, г, д, е, ж, з, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, у, г

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

Ответ 4

Используйте 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]