Feature request: Array.prototype.random

# Will White (5 years ago)

Dear es-discuss,

I would like to propose Array.prototype.random, which would return a random array element the same way array[Math.floor(Math.random() * array.length)] does, because every time I want a random array element, I have to remember how to do it. Do you think this is a useful addition to the language?

Will White

# Michał Wadas (5 years ago)

I believe it's too specialized to be a part of Array interface.

Though, I think JS should have better support for randomness, so we could do:

prng.pick(arr); prng.sample(arr, 5); prng.sampleWithoutRepetitions(arr, 4);

On 15 Jun 2017 20:42, "Will White" <w.white9 at icloud.com> wrote:

Dear es-discuss,

I would like to propose Array.prototype.random, which would return a random array element the same way array[Math.floor(Math.random() * array.length)] does, because every time I want a random array element, I have to remember how to do it. Do you think this is a useful addition to the language?

Will White

# William White (5 years ago)

And prng.pick(str), prng.pick(set) etc.?

# Isiah Meadows (5 years ago)

Better idea: let's introduce an integer-based Math.random equivalent that can be optionally constrained to a specific range.

// Simple polyfill
Math.randomInt = Math.randomInt || function (start, end) {
    if (arguments.length === 0) {
        start = 0; end = Number.MAX_SAFE_INTEGER
    } else if (arguments.length === 1) {
        end = start; start = 0
    }
    start = Math.max(Math.floor(start), -Number.MAX_SAFE_INTEGER)
    end = Math.min(Math.floor(end), Number.MAX_SAFE_INTEGER)

    return Math.floor(Math.random() * (end - start)) + start
}

You could then use it like this: array[Math.randomInt(array.length)]. I feel in this particular case, a more general solution is much more useful than just a "pick some random item in an array". (Number guessing games, anyone?)

Isiah Meadows me at isiahmeadows.com

# peter miller (5 years ago)

Isaiah,

Better idea: let's introduce an integer-based Math.random equivalent that can be optionally constrained to a specific range.

There's a discussion of it here:

rwaldron/proposal-math-extensions#8

Peter

# Henrik Sommerland (5 years ago)

I agree that having a random integer function would be more suitable. Picking a random element from an array is a fairly uncommon thing but generating a random integer in a given range is something much more desirable.

2017-06-20 11:33 GMT+02:00 Isiah Meadows <isiahmeadows at gmail.com>:

# Michael J. Ryan (5 years ago)

Just putting in my $.02

I'm thinking math-rnd-util as an npm module would be a place to start... Then propose extending Math.rnd = rnd-util

Rnd.fill(array) Rnd.pick(array) Rnd.pick(min:int, max:int) ...

I suggest flushing things out in a usable npm module would be a good start.