1258 votes

N'JavaScript ont une range() équivalent?

En PHP, vous pouvez le faire...

range(1, 3); // Array(1, 2, 3)
range("A", "C"); // Array("A", "B", "C")

C'est, il y a une fonction qui vous permet d'obtenir une plage de numéros ou des caractères, en passant les limites supérieure et inférieure.

Est-il rien de construit à du JavaScript natif pour cela? Si non, comment pourrais-je mettre en œuvre?

2092voto

benmcdonald Points 718

L'utilisation de la underscore.js _.range() fonction.

Ou sans dans une bibliothèque:

Array.apply(null, Array(5)).map(function (_, i) {return i;});
>[0,1,2,3,4]

110voto

jflood.net Points 822

Voici mes 2 cents:

    function range(start, count) {
        return Array.apply(0, Array(count))
                    .map(function (element, index) { 
                             return index + start;  
                         });
    }

80voto

alex Points 186293

Il travaille pour des caractères et des nombres, d'aller vers l'avant ou vers l'arrière avec une étape facultative.

var range = function(start, end, step) {
    var range = [];
    var typeofStart = typeof start;
    var typeofEnd = typeof end;

    if (step === 0) {
        throw TypeError("Step cannot be zero.");
    }

    if (typeofStart == "undefined" || typeofEnd == "undefined") {
        throw TypeError("Must pass start and end arguments.");
    } else if (typeofStart != typeofEnd) {
        throw TypeError("Start and end arguments must be of same type.");
    }

    typeof step == "undefined" && (step = 1);

    if (end < start) {
        step = -step;
    }

    if (typeofStart == "number") {

        while (step > 0 ? end >= start : end <= start) {
            range.push(start);
            start += step;
        }

    } else if (typeofStart == "string") {

        if (start.length != 1 || end.length != 1) {
            throw TypeError("Only strings with one character are supported.");
        }

        start = start.charCodeAt(0);
        end = end.charCodeAt(0);

        while (step > 0 ? end >= start : end <= start) {
            range.push(String.fromCharCode(start));
            start += step;
        }

    } else {
        throw TypeError("Only string and number types are supported");
    }

    return range;

}

jsFiddle.

Si augmentant les types natifs est votre truc, alors l'attribuer Array.range.

47voto

kennebec Points 33886
Array.range= function(a, b, step){
    var A= [];
    if(typeof a== 'number'){
        A[0]= a;
        step= step || 1;
        while(a+step<= b){
            A[A.length]= a+= step;
        }
    }
    else{
        var s= 'abcdefghijklmnopqrstuvwxyz';
        if(a=== a.toUpperCase()){
            b=b.toUpperCase();
            s= s.toUpperCase();
        }
        s= s.substring(s.indexOf(a), s.indexOf(b)+ 1);
        A= s.split('');        
    }
    return A;
}


    Array.range(0,10);
    // [0,1,2,3,4,5,6,7,8,9,10]

    Array.range(-100,100,20);
    // [-100,-80,-60,-40,-20,0,20,40,60,80,100]

    Array.range('A','F');
    // ['A','B','C','D','E','F')

    Array.range('m','r');
    // ['m','n','o','p','q','r']

10voto

Miky Dinescu Points 22380

Le Javascript standard ne dispose pas d'une fonction intégrée pour générer des plages. Plusieurs frameworks javascript ajouter le support de ces fonctionnalités, y compris Prototype.js.

Si vous souhaitez vérifier à deux fois, la référence de la Norme ECMA-262.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X