<div dir="ltr">Many scripting languages, such as Ruby, PHP, and Python (via the random module), have a built-in for properly shuffling an array. I propose adding Array.prototype.shuffle to the ES spec. I think it should act like Array.prototype.reverse, shuffling the array in place and returning a reference to it. It should use the Fisher-Yates algorithm. See <a href="https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle" target="_blank">https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle</a><div>





<br></div><div>Since this functionality is missing, some less-seasoned developers fall into the trap of using the "sort by random" method, which produces bias. See <a href="http://sroucheray.org/blog/2009/11/array-sort-should-not-be-used-to-shuffle-an-array/" target="_blank">http://sroucheray.org/blog/2009/11/array-sort-should-not-be-used-to-shuffle-an-array/</a></div>





<div><br></div><div>In a perfect world, this would use a better random number generator than the existing Math.random, but for now an implementation like the one below would still be a vast improvement over having to implement manually and possibly incorrectly. See <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=322529" target="_blank">https://bugzilla.mozilla.org/show_bug.cgi?id=322529</a></div>





<div><br></div><div>Example implementation: <a href="https://gist.github.com/jterenzio/28bb972f3abb7618b14b" target="_blank">https://gist.github.com/jterenzio/28bb972f3abb7618b14b</a><br></div><div><br></div><div>I don't think adding this to the spec would cause many compatibility issues and the implementation should be very straightforward. Let me know what you think!</div>





<div><br></div><div>Best,</div><div>John</div></div>