Array.range() (was: Suggestion: Array.prototype.repeat)

Axel Rauschmayer axel at rauschma.de
Tue Jan 3 09:08:31 PST 2012


On Jan 3, 2012, at 15:46 , Greg Smith wrote:

> What is the use case for .repeat? Trying to imagine some code where I'd need it so I can get a feel for how it should work.

So beauty alone does not count? ;-)

It’s true – there are not a lot of use cases for Array.repeat().

But I keep thinking that there should be a way to create an array of a given length *with* content in it. Rationale: such an array is nice to have as a starting point for a transformation via Array.prototype.map() or an array comprehension [1]. How about the following?

    Array.range = function (start, end) {
        if (arguments.length < 1 || arguments.length > 2) {
            throw new TypeError("Need one or two arguments");
        }
        if (arguments.length === 1) {
            end = start;
            start = 0;
        }
        var result = [];
        for(var i=start; i < end; i++) {
            result.push(i);
        }
        return result;
    }

Interaction:

    > Array.range(4)
    [ 0, 1, 2, 3 ]
    > Array.range(4).map(function () { return "*" })
    [ '*', '*', '*', '*' ]

I’m not yet sure how many use cases there are (suggestions welcome), but it does fill a hole (IIRC, Python has something similar).

TODO: This method probably makes more sense as an iterator (e.g. implemented via a generator). Then one could even omit the upper limit and produce an unlimited sequence.

[1] http://wiki.ecmascript.org/doku.php?id=harmony:array_comprehensions

-- 
Dr. Axel Rauschmayer
axel at rauschma.de

home: rauschma.de
twitter: twitter.com/rauschma
blog: 2ality.com





More information about the es-discuss mailing list