I want to randomly shuffle a list of 4 items but with a seed so that so long as you have the same seed the you will get the same order of items.
["a", "b", "c", "d"]
I figure I can get the seed with Math.random, I don't need something very exact. How do I sort according to the seed?
No, it is not possible to seed Math. random() . The ECMAScript specification is intentionally vague on the subject, providing no means for seeding nor require that browsers even use the same algorithm. So such a function must be externally provided, which thankfully isn't too difficult.
Many researchers worry about how to choose a random number seed. Some people use an easy-to-remember sequence such as their phone number or the first few digits of pi. Others use long prime numbers such as 937162211.
How Seed Function Works ? Seed function is used to save the state of a random function, so that it can generate same random numbers on multiple executions of the code on the same machine or on different machines (for a specific seed value). The seed value is the previous value number generated by the generator.
Seeding allows you to consistently re-create the same data in your database and can be used to: Populate your database with data that is required for your application to start - for example, a default language or a default currency.
You can achieve this with a slight modification to Mike Bostock's implementation of the Fisher–Yates algorithm*:
function shuffle(array, seed) { // <-- ADDED ARGUMENT
var m = array.length, t, i;
// While there remain elements to shuffle…
while (m) {
// Pick a remaining element…
i = Math.floor(random(seed) * m--); // <-- MODIFIED LINE
// And swap it with the current element.
t = array[m];
array[m] = array[i];
array[i] = t;
++seed // <-- ADDED LINE
}
return array;
}
function random(seed) {
var x = Math.sin(seed++) * 10000;
return x - Math.floor(x);
}
*The random
function is taken from this SO answer. It is a hack and not entirely random and most importantly not cryptographically secure! Here's a histogram of samples (also in the comments of that response, takes a while to run). Conclusively, you should only use this when these things don't really matter. Alternatively, substitute the random
function with a better seedable random number generator.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With