diff options
| author | Matt R. Wilson <[email protected]> | 2018-03-10 21:13:22 -0700 |
|---|---|---|
| committer | Matt R. Wilson <[email protected]> | 2018-10-15 07:44:31 -0600 |
| commit | 56d7ccbce18164706447c2c67c2e87b3d0016462 (patch) | |
| tree | 5cc331c9523deb116327985fc87230f9057c1ba1 /lib | |
| parent | 220e5cbff3ac8bd437619c5df712bbfb8622895d (diff) | |
| download | faker-56d7ccbce18164706447c2c67c2e87b3d0016462.tar.xz faker-56d7ccbce18164706447c2c67c2e87b3d0016462.zip | |
Bugfix random.shuffle last element.
There was a bug in the implementation of the modern Fisher–Yates
algorithm in that `i` was being decremented prematurely in each loop.
This caused the last element of the array to never be swapped
and therefore remain the last element.
Updated doc to denote the provided array is shuffled in place.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/helpers.js | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/helpers.js b/lib/helpers.js index 9bb78267..62a8bfa9 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -191,17 +191,24 @@ var Helpers = function (faker) { }; /** - * takes an array and returns it randomized + * takes an array and randomizes it in place then returns it + * + * uses the modern version of the Fisher–Yates algorithm * * @method faker.helpers.shuffle * @param {array} o */ self.shuffle = function (o) { if (typeof o === 'undefined' || o.length === 0) { - return []; + return o || []; } o = o || ["a", "b", "c"]; - for (var j, x, i = o.length-1; i; j = faker.random.number(i), x = o[--i], o[i] = o[j], o[j] = x); + for (var x, j, i = o.length - 1; i > 0; --i) { + j = faker.random.number(i); + x = o[i]; + o[i] = o[j]; + o[j] = x; + } return o; }; |
