From 37aac405d924bd017a4d504c5a222eed3dae8884 Mon Sep 17 00:00:00 2001 From: Florrie Date: Mon, 4 Jun 2018 23:25:36 -0300 Subject: S to shuffle queue --- general-util.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'general-util.js') diff --git a/general-util.js b/general-util.js index 879219d..2ce7ed4 100644 --- a/general-util.js +++ b/general-util.js @@ -63,3 +63,27 @@ module.exports.downloadPlaylistFromOptionValue = function(arg) { return downloadPlaylistFromLocalPath(arg) } } + +module.exports.shuffleArray = function(array) { + // Shuffles the items in an array. Returns a new array (does not modify the + // passed array). Super-interesting post on how this algorithm works: + // https://bost.ocks.org/mike/shuffle/ + + const workingArray = array.slice(0) + + let m = array.length + + while (m) { + let i = Math.floor(Math.random() * m) + m-- + + // Stupid lol; avoids the need of a temporary variable! + Object.assign(workingArray, { + [m]: workingArray[i], + [i]: workingArray[m] + }) + } + + return workingArray +} + -- cgit 1.3.0-6-gf8a5